平时做题主要用的是试除法和埃式筛来判断素数,偶然间看到一个很有意思的素数筛法——六素数法
思路
对于大于等于 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;
}
文章介绍了六素数法,一种用于判断大于等于5的数是否为素数的算法。该方法基于6的因子性质,排除了所有能被2或3整除的数,以及通过6的倍数加1或5的形式筛选可能的素数。代码示例展示了如何在C++中实现这一算法,特别指出此法适用于1e12以内的数。
1021

被折叠的 条评论
为什么被折叠?



