1.对于一个大于5的数来说,如果其模6得到的不是1或者5的话,那么它一定是个合数。
根据数学分析可知6n,6n+2,6n+3,6n+4一定是合数。
2.那么如果一个大于5的数模6等于1或5的话,它是否一定是质数呢?
答案是否定的,比如25就不是,也就是说这个条件是成为质数的必要条件而非充分条件,不过利用这个可以减少筛选的范围。
下面为代码。
bool isprime(int n)
{
if(n==2||n==3)
return 1;
//如果这个数不在6n的两侧,肯定是合数,直接筛掉
else if(n%6==0||n%6==2||n%6==3||n%6==4)
return 0;
//对6n的两侧的数进行判断
else
for(int i=5;i<=sqrt(n);i+=6)
if (n % i == 0 || n % (i + 2) == 0) //i和i+2就是6n两侧的数
return 0;
return 1;
}