蓝桥杯 第100001个素数

来源:互联网 发布:java float和Float 编辑:程序博客网 时间:2024/05/17 01:17

题目:求第100001个素数是什么?

质数(prime number)又称素数,有无限个。除了1和它本身以外不再有其他的除数整除。根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积,最小的质数是2。

public class Main {


public static void main(String[] args) {
// TODO Auto-generated method stub
int N = 1000 * 1000 * 10;//从1~N的所有整数开辟了一个数组空间
int x = 100001;

byte[] a = new byte[N];

for(int i=2; i<N/2;i++){//假设 k*i<N,当k=2,i<N/2
if(a[i]==1) continue;//合数没有参加筛选

for(int k=2; k<=N/i;k++){//与上一个for同理
if(i*k<N)a[i*k] = 1;//1是一个标志,如果是合数就标1,之前一直不知道1是什么,这里标1表示不符合的数

                                //这里是表示i的倍数的数

                         }
}

int m = 0;
for(int i=2;i<N;i++){
if(a[i]==0)
{
m++;
if(m==x) System.out.println(i +" ");//自己理解了代码,以后再写一遍的时候,不知道,为什么这里没有输出

//问了大神,大神说,因为i<n,而通过a[i]来记录m,所以m不可能等于N,所以不可能输出i,我自己试了下,觉得这里//输出空也可以,因为在这里输出m的话会有很多个值,所以最好输出空
}
}

  System.out.println("m="+m);//输出m的值
}
}