我开始学习算法和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;
}
我也在上面尝试过类似的方法(但是我不确定),但是除数少的奇数问题仍然相同。
答案 0 :(得分:2)
假设number == 25
,让我们详细遍历以下代码:
for (int i = 2; i<number; i++) {
if ((number % i) != 0) {
cout << "Yes";
}
}
在循环的第一轮中,我们有number == 25
和i == 2
。
if ((number % i) != 0) {
cout << "Yes";
}
评估number % i
会产生25 % 2
,即1
。 1
不等于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 ++”,我希望您会找到很多有用的资源。