题目解释
在C++中,判断一个数是否为质数,可以编写一个函数来实现。质数是只有两个正因数(1和它本身)的自然数,且它大于1。
递归实现
#include <iostream>
#include <cmath>
bool isPrime(int num, int i = 2) {
if (num <= 2) {
return (num == 2) ? true : false;
}
if (num % i == 0) {
return false;
}
if (i * i > num) {
return true;
}
return isPrime(num, i + 1);
}
int main() {
int number = 1111;
if (isPrime(number)) {
std::cout << number << " 是质数。\n";
} else {
std::cout << number << " 不是质数。\n";
}
return 0;
}
这个函数首先检查输入的数是否小于等于2,如果是,则直接返回true
或false
。然后检查数是否能被i整除,如果是,则返回false
。接着检查i的平方是否大于输入的数,如果是,则返回true
。最后,递归调用isPrime
函数,将i加1后作为参数传入。
在main
函数中,我们提示用户输入一个数,然后调用isPrime
函数来判断这个数是否为质数,并输出相应的结果。
非递归实现
#include <iostream>
#include <cmath>
bool isPrime(int num) {
if (num <= 1) {
return false;
}
if (num == 2) {
return true;
}
if (num % 2 == 0) {
return false;
}
for (int i = 3; i <= sqrt(num); i += 2) {
if (num % i == 0) {
return false;
}
}
return true;
}
int main() {
int number = 35791;
if (isPrime(number)) {
std::cout << number << " 是质数。\n";
} else {
std::cout << number << " 不是质数。\n";
}
return 0;
}
这个函数首先检查输入的数是否小于等于1,如果是,则直接返回false。然后检查数是否为2,如果是,则返回true
。接着检查数是否为偶数,如果是,则返回false
。最后,通过一个循环检查从3到sqrt(num)
的所有奇数,如果num能被这些数中的任何一个整除,则返回false
,否则返回true
。
在main
函数中,我们提示用户输入一个数,然后调用isPrime
函数来判断这个数是否为质数,并输出相应的结果。