题目
素数就是不能再进行等分的整数。比如:7,11。而9不是素数,因为它可以平分为3等份。一般认为最小的素数是2,接着是3,5,…
请问,第100002(十万零二)个素数是多少?
请注意:2 是第一素数,3 是第二个素数,依此类推。
-代码
public class NPrime {
public static void main(String[] args) {
int N = 10000000, n = 100002;
//long start = System.currentTimeMillis();
boolean[] isRight = new boolean[N];
//这是较优的一种筛选了
for(int i=2;i<N/2;i++) {
if(isRight[i])
continue;
for(int j=2;j<=N/i;j++) {
if(i*j<N)
isRight[i*j] = true;
}
}
int cnt = 1;
for(int i=3;i<N;i+=2) {
if(!isRight[i])
cnt++;
if(cnt==n) {
System.out.println(i);
break;
}
}
//long end = System.currentTimeMillis();
//System.out.println(end-start);
}
}
- 结果
1299743
程序大概花了350milliseconds
有人说这样解,
用素数分布定理预判范围,然后用埃拉托色尼法筛吧
反正我是不会。。。。