【发布时间】:2017-11-21 07:13:11
【问题描述】:
我被要求编写一个程序来以最佳方式找到下一个素数。我写了这段代码,但我找不到最佳答案。有什么建议吗?
public static int nextPrime(int input) {
input++;
//now find if the number is prime or not
for(int i=2;i<input;i++) {
if(input % i ==0 ) {
input++;
i=2;
}
else{
continue;
}
}
return input;
}
【问题讨论】:
-
我对问题陈述中“最佳”一词的意图感到困惑。这是字面上指定的内容,还是“高效”的释义?
-
我可以作弊吗?我认为只有 15M 的 32 位素数...可以将它们放在排序列表中...
-
我认为是 O(n^2)
-
Miller-Rabin 是 O(k log3n),因此为每个候选者增加它最多可能是 O(kn log^3n),(对于常数 k,有 1/2^k 的机会错了)
-
我要改变我对 O(n^2)...O(n*k) 的看法,其中 k 是
input附近区域中素数之间的平均距离.我认为这有一些近似值。