我能够让它在1.65秒内运行,但我觉得它可能会更快。双打可能吗?
#include<iostream>
using namespace std;
bool isPrime(int n) {
if(n%2 == 0 && n!=2) return false;
for(int i=3; i<n/2; i++) {
if(n%i == 0) return false;
}
return true;
}
int main() {
int num, i;
i=1000000007;
num = 1000000008;
for(;i<num; i++) {
if(isPrime(i)) cout << i << endl;
}
return 0;
}
答案 0 :(得分:4)
&#34; isPrime&#34;中的for循环没有增量。你有:
for(int i=3; i<n/2;)
你应该:
for(int i=3; i<n/2; i++)
编辑:由于评论者提出了优化,因此您可以轻松做两件事,并大大减少大值n的操作次数。
第一个是,如评论所示,将i递增2(我将按原样保留答案,因为问题的关键是&#34;为什么代码不起作用&#34;而不是&#34; #34;如何优化代码,以及新手程序员更容易以最简单的形式查看修复程序,因为您已经知道已经从先前的条件中删除了所有偶数
第二种是仅检查n的平方根而不是n除以2.原因如下:如果n不是素数,则有两个大于1且小于n的数满足条件
n = x * y
如果x和y都大于n的平方根,那么x * y
大于n。因此,如果你没有找到任何因素,你迭代超过n的平方根,则n是素数。