【发布时间】:2014-01-21 16:50:30
【问题描述】:
我正在编写一个程序来估计素数的非负整数的百分比。以下代码以某种方式产生了一个无限循环,因为我的输出在我正在使用的在线编译器上显示“超时”。但是,我无法弄清楚代码的哪一部分产生了问题。对我来说,它看起来很简单。
#include <iostream>
bool isPrime(unsigned long L) {
if (L < 3) {
return true;
} else {
unsigned long i = 2;
while (i < L)
if (L % i++ == 0)
return false;
}
return true;
}
int main() {
unsigned long k = 0;
unsigned long N = ~k;
unsigned long count = 0;
while (k++ < N)
if (isPrime(k))
++count;
long double percentPrime = count / N;
std::cout << "Percentage of prime numbers from 0 to " << N << " = " << percentPrime;
return 0;
}
【问题讨论】:
-
或者运行很慢...
-
if (L < 3) return true;– 这是对“素数”一词的相当大胆的重新定义,你知道…… -
没有无限循环。只有一个非常
long一个。 -
请注意,即使您的计算以某种方式运行了足够长的时间以完成,
count / N;会导致0,因为它执行整数除法。这是一个调试周期。 -
那么
0是非负整数中素数的百分比(也就是说,它是M趋于无穷大的比例的极限小于 M 且为素数的非负整数)。所以只要摆脱循环,你就完成了;-)
标签: c++ loops infinite-loop primes