我正在使用埃拉托斯特尼筛法来计算第1,000,001个质数,但是我无法计算使用筛法的上界。我的函数:
public static void Seive(int num){
BitSet primes = new BitSet();
for(int i=2; i<=num; i++){
if(!primes.get(i)){
for(int j=i+i; j<=num; j+=i){
primes.set(j);
}
}
}
for(int i=2; i<=num; i++){
if(!primes.get(i))
System.out.print(i + " ");
}
}
计算从2到num的质数,但如果我不知道范围,而是想找到第n个数字呢。
i+i
替换为i*i
,筛法代码将运行得更快。 (所有小于i*i
的合数已经从筛子中消除了,因此没有必要再次访问它们。) - r3mainer