我有以下代码:
#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;
}
无论您输入的数字是质数还是负数,该程序都应该写是
"TAK"
或否"NIE"
。变量n
是要输入到程序中的数字数,而liczba
是要检查其是否为质数的数字。期待一件重要的事情似乎很好。如果我输入数字9,则说是"TAK"
而不是否"NIE"
..我发现这发生在数字:9,27,45,63,81
上,依此类推..如果我从18
开始添加9
时间。我的代码有什么问题?
最佳答案
您正在break
测试的两面。实际上,您只会测试一个除数:
例如liczba = 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
如果有剩余,则不能“尽早”突破循环。这意味着您测试的除数不是数量的因数。如果确实得到
if()
的余数,则只能提早休息,这意味着该数字不是素数-它是合成的。