【发布时间】:2015-06-11 14:38:01
【问题描述】:
由于某种原因,我的最后一个素数(int prime)没有出现在最后。有什么线索吗? fyi:primeEval 代表一个标志,如果循环结束 && primeEval==2,则该数字实际上是一个素数。 qty 代表素数的数量。
int main(){
long primeEval=0,prime=0,qtyprime=0;
time_t timerr=(time(NULL)+10);
for (int i = 2; time(NULL)!=timerr; i++) {
for (int j = 1; j <= i; j++) {
if((i%j)==0 && primeEval<2){
primeEval++;
if (i==j && primeEval==2) {
qtyprime++;
prime=i;
primeEval=0; // Resets for the next number 'i'
}
}
}
}
cout << "last prime found: " << prime << endl << "Ttal primes found: " << qtyprime;
}
【问题讨论】:
-
您可以通过将
j <= i更改为j <= sqrt(i)轻松提高性能。这将强制执行更多更改,但运行速度会更快 -
没有显示是什么意思?好像是给错了号码?根本不打印?
-
@OlivierPoulin 输出为:找到的最后一个素数:2 找到的总素数:45190040
-
另外,一旦你找到了一个数字
y=i%j,为什么还要继续内循环呢?立即完成并继续下一个数字。 -
@shapiro.yaacov 是一个素数,只能被它自己和 1 整除,primeEval 得到 2 个标志来表明它是素数。