1、找素数
用欧拉筛或者埃氏筛
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
素数就是不能再进行等分的整数。比如:7,11。而 99 不是素数,因为它可以平分为 3 等份。一般认为最小的素数是2,接着是3,5,...
请问,第 100002(十万零二)个素数是多少?
请注意:“2” 是第一素数,“3” 是第二个素数,依此类推。
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
public class 找素数{//直接欧拉筛,当方便快捷
static int count=0;
public static void main(String[]args) {
int ed = (int) 1e7;//因为要输出第100002个素数,所以要开大一点
boolean[]isPrime = new boolean[ed+1];
int[]Prime = new int[ed];
for(int i = 2;i<=ed;i++) {
if(!isPrime[i]) {
Prime[count++] = i;
if(count==100002) {//已经把想要的素数存了,没必要再继续找了。
break;
}
}
for(int j =0;j<count;j++) {
if(i*Prime[j]>ed) {
break;
}
isPrime[i*Prime[j]]=true;//每个合数都会被其最小的质因子筛掉
if(i%Prime[j]==0) {//避免重复筛
break;
}
}
}
System.out.println(Prime[100001]);//注意下标从0开始
}
}
先睡了,四级