zoukankan      html  css  js  c++  java
  • 模板

    对于正整数(n),欧拉函数是小于或等于(n)的正整数中与(n)互质的数的数目。
    (varphi(1)=1),除了1之外,所有正整数与它本身都不互质
    对于质数(p)(varphi(p)=p-1)
    (sum_{d|n}varphi(d)=n),其中(d)(n)的因数
    欧拉函数是积性函数,若(m,n)互质,则有(varphi(mn)=varphi(m)varphi(n))

    通式:(varphi(x)=xprod_{i=1}^n(1-frac{1}{p_i})) ((p_1,p_2,cdots,p_n)(x)的所有质因数)

    模板一:求单个正整数的欧拉函数
        时间复杂度(O(sqrt x))
        模板题:hdu1286 找新朋友

    int phi(int x){
        int ans=x;
        for(int i=2;i*i<=x;i++){
            if(n%i==0){
                ans=ans/i*(i-1);
                while(n%i==0){
                    n/=i;
                }
            }
        }
        if(n>1) ans=ans/n*(n-1);
        return ans;
    }
    

    模板二:求区间内所有数的欧拉函数
        时间复杂度(O(n))
        模板题:hdu2824 The Euler function

    const int maxn=500010;
    int phi[maxn];
    
    void get_phi(int n){
        for(int i=0;i<n;i++) phi[i]=i;
        for(int i=2;i<n;i++){
            if(phi[i]==i){
                for(int j=i;j<n;j+=i) phi[j]=phi[j]/i*(i-1);
            }
        }         
    }
    
  • 相关阅读:
    HDU
    HDU
    HDU
    HDU
    HDU
    HDU
    HDU
    HDU
    HDU
    HDU
  • 原文地址:https://www.cnblogs.com/fxq1304/p/13280774.html
Copyright © 2011-2022 走看看