zoukankan      html  css  js  c++  java
  • 欧拉函数

    1~n中与n互质的数被称为欧拉函数。

    怎么求欧拉函数呢 只要拿n减去与n不互质的数的个数就可以了

    φ(n)=n*质数p|n(1-1/p)

    欧拉函数的性质

    1.任意n>1,1~n中与n互质的数之和为φ(n)*n/2

    证明:gcd(n,x)=gcd(n,n-x) 所以与n互质的数x,n-x是成对出现的 两个数的平均值为n/2

    2.若a,b互质,则φ(ab)=φ(a)φ(b)

    3.若f是积性函数,且在算数基本定理中n=∏(pici) i=1~m,则f(n)=∏f(pici) i=1~m

    积性函数:如果当a,b互质时,有f(ab)=f(a)*f(b),则称函数f为积性函数

    4.若p|n且p2|n,则φ(n)=φ(n/p)*p

    证明:由给定条件可知 n与n/p有相同的质因子只是p的指数不同

         按欧拉函数的计算公式写出来φ(n)/φ(n/p) 就是p

    5.若p|n且p2不能被n整除,则φ(n)=φ(n/p)*φ(p)

    证明:p与n/p互质 所以φ(n)=φ(n/p)*φ(p)

          若p为质数 φ(p)=p-1 即φ(n)=φ(n/p)*φ(p) φ(n)=φ(n/p)*(p-1)

     

    板子题

    [SDOI2008]仪仗队

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #define Rg register
    #define go(i,a,b) for(Rg int i=a;i<=b;i++)
    using namespace std;
    int n,ans,phi[40010];
    int el()
    {
        go(i,1,n)phi[i]=i;
        go(i,2,n)
            if(phi[i]==i)
                go(j,1,n/i)
                    phi[i*j]=phi[i*j]/i*(i-1);
    }
    int main()
    {
        scanf("%d",&n);
        if(n==1){printf("0");return 0;}
        el();n--;
        go(i,2,n)ans+=phi[i]*2;
        printf("%d",ans+3);
        return 0;
    }
    View Code
    光伴随的阴影
  • 相关阅读:
    c# 异步和同步问题(转载)
    用Python作GIS之四:Tkinter基本界面的搭建
    Linux必知必会--vmstat
    Linux必知必会--awk
    Linux必知必会--sed
    Linux必知必会--grep
    Linux必知必会--curl
    康威定律
    移动端抓包合集
    MySQL重置自增id
  • 原文地址:https://www.cnblogs.com/forward777/p/10500861.html
Copyright © 2011-2022 走看看