我有以下代码:

#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()的余数,则只能提早休息,这意味着该数字不是素数-它是合成的。

08-26 02:09