c++ - 素数C++

标签 c++

我有这个代码:

#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/

相关文章:

c++ - 当警告为错误时使用 [[deprecated]] 属性 (-Werror)

c++ - std::vector 混合数据类型

c++ - _get_pgmptr 与 GetModuleFileName

c++ - 使用 openCV 在图像中查找 "Missing"对象

c++ - 覆盖新的运营商 - 非分配安置分配功能

c++ - Visual Studio 2013 中是否有像 Netbeans 中那样的视觉表示?

c++ - 如何只将部分 OpenGL 代码实现到使用 SDL 编写的游戏中?

c++ - STL 迭代器 : Assertion Error

c++ - Armadillo eigs_sym : decomposition failed

C++模板函数多重实例化