zoukankan      html  css  js  c++  java
  • 线性筛 模板

    直接Copy好了

    // 欧拉函数 phi(n) = n * π(1-1/p) ,p为n的质因数
    // phi(m*n) = phi(m) * phi(n),nm互质
    // phi(i*p) = p*phi(i) ,当i mod p == 0
    
    
    const int N = 3e6+5;
    
    bool vis[N];
    int cnt,prime[N],phi[N];
    
    // 线性筛求素
    void Prime() {
        vis[0] = vis[1] =1;
        for(int i=2; i<N; i++) {
            if(vis[i] == 0) {
                prime[cnt++] = i;
            }
            for(int j=0; j<cnt && prime[j]*i <N; j++) {
                vis[i*prime[j]] = 1;
                if(i%prime[j] == 0) break;
            }
        }
    }
    
    //欧拉函数
    void Eula() {
        phi[1] = 1;
        for(int i=2; i<N; i++) {
            if(vis[i] ==0) {
                prime[cnt++] = i;
                phi[i] = i-1;
            }
            for(int j=0; j<cnt && prime[j]*i<N; j++) {
                vis[i*prime[j]] = 1;
                // i mod prime[j] == 0, phi[i*prime[j]] = phi[i] * prime[j]
                if(i%prime[j] ==0) {
                    // i -> k * prime[j]
                    phi[i*prime[j]] = phi[i] * prime[j];
                    break;
                }else {
                    //phi(m*n) = phi(m)*phi(n) prime[j]为素数,因此phi[prime[j]] = prime[j] -1;
                    phi[i*prime[j]] = phi[i] *(prime[j]-1);
                }
            }
        }
    }
  • 相关阅读:
    stl-序列式容器
    BFS
    Hash
    二分法
    草稿1
    红黑树的左旋、右旋和颜色变换
    动态规划
    自动驾驶-安全
    二叉树

  • 原文地址:https://www.cnblogs.com/Draymonder/p/9478413.html
Copyright © 2011-2022 走看看