int isprime(int x) {
if (x < 2) return false; // 小于2的数都不是质数
for (int i = 2; i <= int(sqrt(x)); i++) // 从2到sqrt(x)
if (x % i == 0) return false;
return true;
}
当然,这个算法还可以继续优化,我们可以判断2是不是这个数的约数,然后就可以从3开始循环到sqrt(n)了,每次循环i+2,那么这个算法的复杂度就为O(sqrt(n)/2)。
int isprime(int x) {
if (x < 2) return false; // 小于2的数都不是质数
if (x != 2 && x % 2 == 0) return false; // 不是2且能被2整除的数都不是质数
for (int i = 3; i <= int(sqrt(x)); i += 2) // 每次循环加2
if (x % i == 0) return false;
return true;
}
即使是上述的算法,在遇到很大的数字(n≥100,000,000)的时候,还是很慢。
那还有没有更快的算法呢?答案是有的,埃拉托斯特尼筛法就是其中之一。