我目前正在学习《C++ Without Fear,第三版》。我对这段代码有点困惑,我明白if
语句是如何用来判断是否n
能被整除的i
。我只是不明白while
循环的意义是什么。
当然,你也可以不使用它来编写代码,如果循环if
返回余数,那么它就是一个质数,否则它就不是质数。
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int n = 0; // Number to test for prime-ness
int i = 2; // Loop counter
bool is_prime = true; // Boolean flag...
// Assume true for now
// Get a number from the keyboard
cout << "Enter a number and press ENTER: ";
cin >> n;
// Test for prime by checking for divisibility
// by all whole numbers from 2 to sqrt(n).
while (i <= sqrt(n)){
if (n % i == 0) { // If i divides n,
is_prime = false; // n is not prime
break; // BREAK OUT OF LOOP NOW!
}
++i; // Add 1 to i.
}
// Print results
if (is_prime) {
cout << "Number is prime." << endl;
} else {
cout << "Number is not prime." << endl;
}
return 0;
}
我不明白,请帮帮我。
这对于有效检查至关重要。
循环
while
遍历n
从 开始2
直到 的潜在除数sqrt(n)
。这是一种测试素数的有效方法,因为:无需检查从
2
到 的所有数字n-1
,而是检查 到 ,这样可以sqrt(n)
减少迭代次数;如果某个数字n
的除数大于sqr(n)
,则其相应的余除数必须小于sqr(n)
。通过检查所有可能的除数,直到
sqrt(n)
,您可以确保如果n
是合数,您将在这个范围内找到一个除数,如果找不到除数,则n
是素数。如果删除
while
循环而只使用if
语句,则需要明确列出所有潜在除数,这不切实际且效率低下。while
循环提供了一种系统方法来检查所有必要的除数,直至sqrt(n)
。