首页 > 其他 > 详细

6N+/-1素数测试法

时间:2015-08-28 23:02:56      阅读:205      评论:0      收藏:0      [点我收藏+]

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

  

6N+/-1素数测试法

原文:http://www.cnblogs.com/modengdubai/p/4767974.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!