1、性质快速判断
所有的自然数可以表示为{6n,6n+1,6n+2,6n+3,6n+4,6n+5},而集合所有的素数(除了2和3)包含在集合{6n+1,6n+5}中,但是并不是集合{6n+1,6n+5}中的所有数都为素数,所以如果一个数如果与6取余如果既不是1也不是5的话那么它一定不是素数,只有为1或5才有可能是素数。
bool isPrime(int n)
{
int i,s=sqrt(n);
if(n<=3)
return n>1;
if(n%6!=1&&n%6!=5)
return false;
for(i=5;i<=s;i+=6)
{
if(n%i==0||n%(i+2)==0)//判断集合{6n+1,6n+5}中的数是不是n的因数
return false;
}
return true;
}
2、试除法
判断区间2到sqrt(n)的数是否全部不是n的因数。
bool isPrime(int n)
{
int i,s=sqrt(n);
if(n==1)
return false;
for(i=2;i<=s;i++)
{
if(n%i==0)
{
return false;
}
}
return true;
}