1. 质数
在大于1的整数中,如果只包含1和本身这两个约数,就被称之为质数,或者叫做素数。
在2到n-1之间任取一个数,如果n能被整除则不是素数,否则就是素数。
(1) 质数的判定—试除法O(sqrt(n)):
朴素版的试除法判定质数
bool is_prime(int x)
{
if (x < 2) return false;
for (int i = 2; i < x; i++)
{
if (x % i == 0)
{
return false;
}
}
return true;
}
该算法的时间复杂度为O(n)。
优化版的试除法判定质数
例如:设 d 为被除数,n 为要被判定的数。如果 n%d=0,则 n%(n/d)=0,所以只需枚举 d ⩽ n/d,所以 d ⩽ 根号n。
在这里有一点需要注意:不推荐去写 <= sqrt(n)
因为如果这样去写,每一次循环都要去调用该函数,调用该函数的时间很慢,所以不推荐。
时间复杂度为 O(sqrt(n))。
bool is_prime(int x)
{
if (x < 2) re