平时做题主要用的是试除法和埃式筛来判断素数,偶然间看到一个很有意思的素数筛法——六素数法
思路
对于大于等于 5 的数,我们可以用 6n, 6n+1, 6n+2, 6n+3, 6n+4, 6n+5 表示
又 6 的真因子有 1、2、3 ,则有 6n 可以被 2、3 整除
6n+2, 6n+4 可以被 2 整除
6n+3 可以被 3 整除
则对于大于等于 5 的数,若其为素数则一定满足 6n+1 或 6n+5 的形式
代码
bool isPrime(int num) {//六素数法 只能判断1e12以内的素数
if(num == 2 || num == 3) return true;
if(num % 6 != 1 && num % 6 != 5) return false;//等价于 if(num % 2 == 0 || num % 3 == 0) return false;
for(int i = 5; i <= sqrt(num); i += 6)
if(num % i == 0 || num % (i+2) == 0)
return false;
return true;
}