【发布时间】:2015-11-04 10:52:38
【问题描述】:
我正在使用 Eratosthenes 的 Seive 来计算第 1,000,001 个素数,但是,我无法计算使用 Seive 的上限。我的功能:
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 个数怎么办。
【问题讨论】:
-
请注意,您可以观看 Numberphile 关于素数的 Youtube 视频,
nth 素数约等于n*ln(n)。 -
只是一个小细节,但如果将
i+i替换为i*i,筛选代码将运行得更快。 (所有小于i*i的合数都已经从筛子中剔除,因此无需再次访问。)
标签: java algorithm math primes