首页 > 其他 > 详细

素数筛选模板

时间:2016-03-01 18:37:01      阅读:159      评论:0      收藏:0      [点我收藏+]

1.普通素数筛选模板

最普通的方法。。。

//判断是否是一个素数  Mark 标记数组 index 素数个数
int Prime(){
    int index = 0;
    memset(Mark,0,sizeof(Mark));
    prime[index++]=2;
    for(int i = 3;i < MAXSIZE;i+=2){
        if(Mark[i] != 1)
        {
            prime[index++] = i;
            for(int j = i+i;j < MAXSIZE;j += i){
                Mark[j] = 1;
            }
        }
    }
    return index;
}

 2.快速素数筛选

这种方法经证明只需要2n的复杂度,但是因为有*,/,%等运算,所以只比一般素数筛选快3倍左右。

int Mark[MAXSIZE];
int prime[MAXSIZE];

//判断是否是一个素数  Mark 标记数组 index 素数个数
int Prime(){
    int index = 0;
    memset(Mark,0,sizeof(Mark));
    for(int i = 2; i < MAXSIZE; i++)
    {
        //如果未标记则得到一个素数
        if(Mark[i] == 0){
            prime[index++] = i;
        }
        //标记目前得到的素数的i倍为非素数
        for(int j = 0; j < index && (long long)prime[j] * i < MAXSIZE; j++)
        {
            Mark[i * prime[j]] = 1;
            if(i % prime[j] == 0){
                break;
            }
        }
    }
    return index;
}

 

素数筛选模板

原文:http://www.cnblogs.com/chenhuan001/p/5231807.html

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