zoukankan      html  css  js  c++  java
  • XDU 1098 (欧拉函数模板题)

    原题链接,点击此处 
    欧拉函数:φ(N)表示对一个正整数N,欧拉函数是小于N且与N互质的数的个数 
    通式:φ(x) = x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn) 
    其中p1, p2……pn为x的所有质因数,x是不为0的整数。 
    注意:将n分解为最简质因数,每种质因数只用一次。 
    比如 12 = 2*2*3,那么 φ(12) = 12 * (1-1/2) * (1-1/3) = 4(1,5,7,11) 
    若 n = p^k ( p为 质数 ),则 φ(n) = p^k-p^(k-1) = (p-1)p^(k-1) 
    特例,若n = p(k=1, p 为质数),则 φ(n) = p-p^(1-1) = p-1。 
    因为质数p除了1以外的因数只有p,故1至p的整数只有p与p不互质

    一些欧拉函数的性质: 
    ① N是不为0的整数。φ(1)=1(唯一和1互质的数就是1本身) 
    ② 除了N=2,φ(N)都是偶数. 
    ③ 小于N且与N互质的所有数的和是φ(n)*n/2。 
    ④ 欧拉函数是积性函数——若m,n互质,φ(m*n)=φ(m)*φ(n)。 
    ⑤ 当N为奇数时,φ(2*N)=φ(N) 
    ⑥若N=p^k,φ(N)=p^k-p^(k-1)=(p-1)p^(k-1),因为除了p的倍数外,其他数都跟N互质。 
    ⑦ 当N是质数时,φ(N) = N-1 
    相关性质证明参考:http://blog.csdn.net/yxuanwkeith/article/details/52387873 
    PPT讲解:http://max.book118.com/html/2016/1025/60637698.shtm 
    由于一个数n的质因数一定小于等于sqrt(n),所以时间复杂度O(sqrt(n))

    #include<cstdio>
    /*素数筛 
    phi[maxn]打表 
    int p[maxn];
    void phi()
    {
        for(int i=1;i<maxn;i++) p[i]=i;
        for(int i=2;i<maxn;i++){
            if(p[i]==i){
                for(int j=i;j<maxn;j+=i)
                    p[j]-=p[j]/i;
            }
        }
    }
    */
    int phi(int x)
    {
        int ans=x;
        for(int i=2;i*i<=x;i++){
            if(x%i==0)
                ans-=ans/i;
            while(x%i==0)   x/=i;
        }//每种质因数只用一次
        if(x>1) 
            ans-=ans/x;
        return ans;
    }
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
            printf("%d
    ",phi(n));
    } 
  • 相关阅读:
    计算机网络常见面试题
    字节跳动2022秋招提前批来了!!!
    IBM Watson Studio
    Git提交GitHub
    python获取股票和基金等数据
    Cloud Foundry
    微软亚洲研究院的NLP一例
    Streamlit的学习小记
    在线学习云技术相关等
    IBM云部署相关
  • 原文地址:https://www.cnblogs.com/freinds/p/6292186.html
Copyright © 2011-2022 走看看