素数实现

时间:2019-05-22 19:18:17

标签: c++

我开始学习算法和C ++,并考虑编写一个可以检查质数的程序。我知道它的代码很糟糕,我将对此进行改进,但是首先我需要知道这个问题。

所以让我们检查数字=25。当i = 5,25%5 = 0时,为什么它给我“是”?

#include <iostream>
using namespace std;
int main()
{
int number;
cin >> number;
if (number < 2) {
    cout << "No";
}
else if (number == 2) {
    cout << "Yes";
}
else {
    for (int i = 2; i<number; i++) {
        if ((number % i) != 0) {
            cout << "Yes";
        }
    }
}

return 0;
}

================================================ ======================

#include <iostream>
using namespace std;
int main()
{
int number;
cin >> number;
if (number < 2) {
    cout << "No";
}
else if (number == 2) {
    cout << "Yes";
}
    for (int i = 2; ((i < number) && (number%i==0)); i++) {
        cout << "No";
    }
return 0;
}

我也在上面尝试过类似的方法(但是我不确定),但是除数少的奇数问题仍然相同。

1 个答案:

答案 0 :(得分:2)

假设number == 25,让我们详细遍历以下代码:

for (int i = 2; i<number; i++) {
    if ((number % i) != 0) {
        cout << "Yes";
    }
}

在循环的第一轮中,我们有number == 25i == 2

if ((number % i) != 0) {
    cout << "Yes";
}

评估number % i会产生25 % 2,即11不等于0,因此执行if语句的主体,并将"Yes"打印到该标准输出。


很显然,有许多数字没有将25进行均分。要测试25是否为质数,我们需要测试数字中没有 个均分25

这是您可以执行此操作的一种方法:

for (int i = 2; i<number; i++) {
    // if `i` evenly divides `number`,
    if ((number % i) == 0) {
        // it is certainly not prime
        cout << "No";
        // stop searching and return
        return 0;
    }
}
// Otherwise, if this point is reached, nothing divides `number`
// Thus, `number` must be prime
cout << "Yes";

使用任何优秀的C ++编译器,您都应该能够以交互方式调试程序,并逐行逐步执行代码,观察值的变化,以及直觉和代码不匹配的地方。调试是编程中非常有价值的部分。具体执行的方式随编译器的不同而不同,但是如果您只是简单地使用Google的“如何使用[我的编译器]调试C ++”,我希望您会找到很多有用的资源。