质数的定义及判断方法
质数的定义在小学的时候就学过,指的是一个正整数的约数只有1和自身,不满足这样性质的正整数就叫做合数。由此可以先判断1不是质数,而2是质数(2=1∗2),对于不小于3的正整数x,它是质数就代表着2∼x−1的整数都不能整除x,因此可以很简单的遍历2∼x−1,判断其中是否有整除x的数。
与此同时,还可以注意到,不小于3的合数x,其不同约数个数可以是奇数也可以是偶数,并且当且仅当它是完全平方数时,其约数个数才是奇数。如果将每个约数两两配对的话,剩下那个无法被配对的约数一定是√x。两两配对的约数中,必定有一半在√x以下,另一半则在√x以上。因此枚举范围可以少一半,从2∼x−1缩减为2∼⌊√x⌋
C++ 代码
/**
* @brief 质数判断
* @param x 待判断的数
* @retval true 是质数
* @retval false 不是质数
*/
bool isPrime(int x) {
if (x == 1) { //1不是质数
return false;
}
if (x == 2) { //2是质数
return true;
}
//不小于3的要试除
for (int i = 2; i <= x / i; i++) { //i*i<=x容易溢出
if (x % i == 0) {
return false;
}
}
return false;
}