【发布时间】:2017-06-05 14:00:12
【问题描述】:
我已经处理了几天的作业问题,但似乎无法获得正确的输出(我已经尝试了很多东西!)问题是:
编写一个程序,使用两个嵌套的 for 循环和取模运算符 (%) 来检测和打印从 1 到 10,000 的素数。
我一直在做从 1 到 10 的小测试,以确保其正常工作。我的输出是 2,3,5,7,9,所以我知道出了点问题。当我将数字从 10 增加到 20 时,它正在打印 2 加上所有奇数。我在下面包括我的代码。谢谢!!
int main() {
for (int i=2; i <=10; i++){
for (int j=2; j<=i; j++){
if (i%j==0 && j!=i) {
break;
}
else {
cout<< i <<endl;
break;
}
}
}
}
【问题讨论】:
-
无论如何,你可能没有意识到你在第一次迭代中就打破了循环。
-
@perreal - 不完全;参见例如en.m.wikipedia.org/wiki/Sieve_of_Eratosthenes
-
什么也可能帮助你解决问题 - 首先创建一个函数 bool isPrime(int x) 并在外循环中调用它。这将帮助您将 i 和 j 分开并更好地调试问题。
-
@perreal 我的意思是您的陈述“在尝试所有可以除该数字的可能数字之前,不可能确定一个数字是素数”并不十分准确。例如,2、3、4 和 6 都除以 12,但我不需要测试 all 来确定 12 不是素数。我还想说,有更好的方法来测试素数,而不是天真地除以从 2 到 sqrt(n) 的所有数字。
-
@perreal 不太清楚你的意思。但只是挑一点;除了 2 你不需要测试偶数,因为它们不会是素数,还有only numbers that +/-1 are divisible by 6 can possibly be prime,这也可以帮助缩小测试范围...... 许多缩小范围的方法。