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

    Bryce1010模板

    2.1.1 素数筛选(判断 < MAXN的数是否是素数)

    /*
     *  素数筛选,判断小于MAXN的数是不是素数
     *  notprime是一张表,false表示是素数,true表示不是
     */
    
    const int MAXN = 1000010;
    bool notprime[MAXN];
    
    void init()
    {
        memset(notprime, false, sizeof(notprime));
        notprime[0] = notprime[1] = true;
        for (int i = 2; i < MAXN; i++)
        {
            if (!notprime[i])
            {
                if (i > MAXN / i)   //  阻止后边i * i溢出(或者i,j用long long)
                {
                    continue;
                }
                //  直接从i * i开始就可以,小于i倍的已经筛选过了
                for (int j = i * i; j < MAXN; j += i)
                {
                    notprime[j] = true;
                }
            }
        }
    }
    

    2.1.2 素数筛选(筛选小于等于MAXN的素数)

    /*
     *  素数筛选,查找出小于等于MAXN的素数
     *  prime[0]存素数的个数
     */
    
    const int MAXN = 100000;
    int prime[MAXN + 1];
    
    void getPrime()
    {
        memset(prime, 0, sizeof(prime));
        for (int i = 2; i <= MAXN; i++)
        {
            if (!prime[i])
            {
                prime[++prime[0]] = i;
            }
            for (int j = 1; j <= prime[0] && prime[j] <= MAXN / i; j++)
            {
                prime[prime[j] * i] = 1;
                if (i % prime[j] == 0)
                {
                    break;
                }
            }
        }
    }
  • 相关阅读:
    Expanding Rods(二分)
    Monthly Expense(二分)
    sdut1269 走迷宫(dfs)
    走迷宫(dfs)
    C Looooops(扩展欧几里得+模线性方程)
    41. First Missing Positive
    40. Combination Sum II
    39. Combination Sum
    37. Sudoku Solver
    36. Valid Sudoku
  • 原文地址:https://www.cnblogs.com/bryce1010/p/9386873.html
Copyright © 2011-2022 走看看