zoukankan      html  css  js  c++  java
  • 素数的线性筛选

    线性筛选法之所以称之为线性就是因为其对于每一个合数只用其最小的素因子将其筛选出来。代码如下:

    #include <cstdlib>
    #include <cstdio>
    #include <algorithm>
    #define MAXN 1000000
    using namespace std;
    
    int p[1000005], pri[1000005], idx = -1;
    
    void GetPrime()
    {
        for (int i = 2; i <= MAXN; ++i) {
            if (!p[i]) { // 说明i是一个素数
                pri[++idx] = i;
            }
            for (int j = 0; j <= idx && pri[j]*i <= MAXN; ++j) {// 遍历所有的素因子 
                p[pri[j]*i] = 1;
                if (i % pri[j] == 0) {  // 如果i能够整除pri[j]那么i*pri[j+1]就一定被pri[j]数整除 
                    break;    
                }
            }
        }
        printf("idx = %d\n", idx);
        for (int i = 0; i <= 100; ++i) {
            printf("%d ", pri[i]);
        }
    }
    
    int main()
    {
        GetPrime();
        system("pause");
        return 0;    
    }
  • 相关阅读:
    [SDOI2015]星际战争
    [SDOI2016]生成魔咒
    hdu3311
    [ZJOI2011]最小割
    P3331 [ZJOI2011]礼物(GIFT)
    [ZJOI2010]贪吃的老鼠
    状压dp-----三进制
    noip2016 天天爱跑步
    概率期望dp
    poj2186
  • 原文地址:https://www.cnblogs.com/Lyush/p/2625510.html
Copyright © 2011-2022 走看看