gpt4 book ai didi

c++ - 素数C++

转载 作者:太空宇宙 更新时间:2023-11-04 15:14:23 25 4
gpt4 key购买 nike

我有这个代码:

#include <iostream>
#include <cmath>

using namespace std;

int n, liczba;

int main()
{
cin >> n;
for (int i = 0; i < n; i++) {
cin >> liczba;
if (liczba < 2) {
cout << "NIE" << endl;
} else if (liczba == 2) {
cout << "TAK" << endl;
}

for (int i = 2; i < liczba; i++) {
if (liczba % i == 0) {
cout << "NIE" << endl;
break;
} else if (liczba % i != 0) {
cout << "TAK" << endl;
break;
}
}
}
return 0;
}

无论您输入的数字是否为素数,该程序都应该写 yes "TAK" 或 no "NIE"。变量n 是你要输入程序的数字的个数,liczba 是你要检查它是否为素数的数字。它似乎工作正常期待一件重要的事情。如果我输入数字 9,它会说是 "TAK" 而不是 no "NIE"。我发现这发生在数字上:9,27,45, 63,81 等等.. 如果我从 9 开始添加 18 它每次都会发生。

我的代码有什么问题?

最佳答案

您在 if() 测试的两边都中断。实际上,您只会测试一个除数:

例如利兹巴 = 9

1. if (liczba % 2 == 0) -> if (9 % 2 == 0) -> if (1 == 0) -> false
2. ...jump to else
3. if (liczba % 2 != 0) -> if (9 % 2 != 0) -> if (1 != 0) -> TRUE
4. spit out 'tak' and break out of the loop

如果得到余数,则不能“提前”跳出循环。这意味着您测试的除数不是数字的一个因数。只有当您得到 0 的余数时,您才能提前中断,这意味着该数字不是素数 - 它是合数。

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

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