gpt4 book ai didi

c++ - 素数计算器C++

转载 作者:行者123 更新时间:2023-11-28 06:40:42 25 4
gpt4 key购买 nike

我一直在尝试编写一个程序来打印出不超过值 N 的素数。

运行程序时,系统提示我按预期输入值 N,但当我按回车时,程序结束了。我认为问题可能出在 break 语句上:

if (modulo == 0) break;

尽管读到“break”只会结束嵌套循环而不是两者,但我认为它是唯一可能出错的地方。当我将其替换为“继续”时,程序会打印出从 N 到 0 的所有整数,因此如果我输入 N=20,则输出为 20、19、18、... 3、2、

代码的相关部分如下,对于 C++ 新手的任何帮助/建议将不胜感激。

int N, f;
float modulo;

cout << "Welcome to the prime number sieve\n";
cout << "Enter the number up to which the prime numbers will be printed: ";
cin >> N;

for (int j = N; j != 1; j--) {
f = j;

for (f; f != 0; f--) {
modulo = j%f;
if (f == 1) {
cout << j << ", ";
}
if (modulo == 0) break;
}

}

return 0;

最佳答案

你的算法是错误的。无论数字是多少,第二个循环中的中断将立即发生。

假设输入是 20。然后

第一次迭代:

j = 20
f = j = 20
modulo = 20 % 20 = 0
break

第二次迭代:

j = 19
f = j = 19
modulo = 19 % 19 = 0
break

等等......你应该做的第一件事就是查找Sieve of Eratosthenes

对于您的程序,这个 ( Explanation ) 怎么样:

for (int j=2; j < N; j++) {
for (int f = 2; f*f <= j; f++) {
if (j % f == 0) {
break;
}
else if (f+1 > sqrt(j)) {
cout << j << " ";
}
}
}

关于c++ - 素数计算器C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26028523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com