我有这个代码:
#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/