标签:
任何一个数都可以写成:6N,6N+1,6N+2,6N+3,6N+4,6N+5(N为0.1.2.3.....)中的一种形式(因为对任何一个数对6取模一定能得到这其中的一个形式)
其中当N大于等于1时,6N,6N+2,6N+4,都能被2整除,6N+3能被3整除。所以6N,6N+2,6N+3,6N+4,都不可能是素数
所以只要对6N+1,6N+5进行素数测试就能得到所有给定范围内的素数。
时间复杂度严格小于O(sqrt(N)*N)
int prime[max],k=0;
bool IsPrime(int x)
{
if(x==2)
return true;
if(k%2==0)
return false;
for(int i=3;i*i<k;i++)
{
if(k%i==0)
return false;
}
return true;
}
void doprime()
{
for(int i=0;i<=max;i+=3)
{
for(int j=0;j<2;j++)
if(IsPrime(2(i+j)-1))
prime[k++]=2(i+j)-1;
}
}
标签:
原文地址:http://www.cnblogs.com/modengdubai/p/4767974.html