码迷,mamicode.com
首页 > 其他好文 > 详细

6N+/-1素数测试法

时间:2015-08-28 23:06:05      阅读:253      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!