6N+/-1素数测试法

 任何一个数都可以写成: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;
    }
}

  

posted on 2015-08-28 21:53  insaneman  阅读(783)  评论(0)    收藏  举报

导航