知识点:
- 整数n内大概有n/log(n)个素数
- 埃式筛法:从左到右,遇到素数,将素数的倍数标记为非素数,然后继续这样筛。
- 特别当素数个数要求求的次数非常多,就特别推荐埃式筛法
public class Main {
public static boolean arr[] ;
public static void main(String[] args) {
//求第N个质数
int N = 100000;
int n = N;
while(n / Math.log(n) < N) {
n ++;
}
arr = new boolean[n];
//埃式筛法
for(int i = 2; i < n; i ++) {
if(!arr[i]) {
for(int j = 2; j * i < n ; j ++) {
arr[j * i] = true;
}
}
}
int nt = 0;
for(int i = 2; i < n; i ++) {
if(!arr[i]) nt++;
if(nt == N) {
System.out.println(i);
return;
}
}
}
}
运行结果:
1299709