题目:求从2开始的第N个素数
n/Math.log(n) < N N代表第N个素数 n代表要遍历的数据规模(数学公式 我们拿来用就好了)
从2遍历到n,如果未被标记过说明是素数,那么它的倍数一定是合数,从它的第二倍开始遍历一直遍历到n,将素数的倍数都标记为合数。
/**
* 埃氏筛法 耗时 是普通方法的1/10
* 求第N个素数
* @param N
*/
static void solo(int N){
int n = 2;
while (n/Math.log(n) < N){
n++;
}
int[] arr = new int[n]; //初值为0
int x = 2;
while (x<n){
if (arr[x]!=0){
x++;
continue;
}
int k=2;
while (k*x<n){
arr[k*x]=-1;
k++;
}
x++;
}
int sum = 0;
for (int i = 2; i < n; i++){
if (arr[i]==0){
sum++;
}
if (sum==N){
System.out.println(i);
return;
}
}
}