zoukankan      html  css  js  c++  java
  • 素数筛选模板

    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倍左右。

    关于复杂度的证明,用整体的思路就很好证明,算法由一层循环O(n)再加上所有产生的合数,可以证明每个合数都会被产生一次且仅一次。

    所以这个算法每一次运算都产生了一个合数(真是牛逼),没有丝毫重复的操作。最终复杂度为O(n)

    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;
    }
  • 相关阅读:
    软件测试人员的年终绩效考核怎么应对
    收藏
    顶踩组件 前后两版
    订阅组件
    hdu 1963 Investment 完全背包
    hdu 4939 Stupid Tower Defense 动态规划
    hdu 4405 Aeroplane chess 动态规划
    cf 414B Mashmokh and ACM 动态规划
    BUPT 202 Chocolate Machine 动态规划
    hdu 3853 LOOPS 动态规划
  • 原文地址:https://www.cnblogs.com/chenhuan001/p/5231807.html
Copyright © 2011-2022 走看看