zoukankan      html  css  js  c++  java
  • 欧拉函数 欧拉筛法 欧拉定理

    欧拉函数是小于x的整数中与x互质的数的个数,一般用φ(x)表示。特殊的,φ(1)=1。

    若p是质数,显然有φ(p)=p-1。

    计算公式:φ(N)=N*(1-1/P1)*(1-1/P2)*...*(1-1/Pn)

    欧拉函数是积性函数,但不是完全积性函数。即当且仅当x和y互质时,有phi(x,y)=phi(x)*phi(y),证明显然。

    欧拉函数的一些性质:

    n为奇数时,φ(2n)=φ(n)

    若p为质数,n=p^k,φ(n)=p^k-p^(k-1)

    n>2时,φ(n)一定为偶数

    小于n的数中,与n互质的数的总和为:φ(n) * n / 2

    n的因数(包括1和它自己)的欧拉函数之和等于n

    单个欧拉函数可以在sqrt(n)计算出来

    int euler(int n){
        int m=sqrt(n)+1;
        int ans=n;
        for(int i=2;i<=m;i++)
            if(n%i==0){
                ans=ans/i*(i-1);
                while(n%i==0)n/=i;
            }
        if(n>1)ans=ans/n*(n-1);//如果n是质数ans=n-1,否则ans不会变 
        return ans;
    }

    欧拉筛法同时求欧拉函数

    void euler(int n)
    {
        phi[1]=1;
        for (int i=2;i<=n;i++)
        {
            if (isprime[i]==0)
            {
                prime[++num]=i;
                phi[i]=i-1;
            }
            for (int j=1;j<=num&&prime[j]*i<=n;j++){
                isprime[i*prime[j]]=1;
                if (i%prime[j]==0)
                {
                    phi[i*prime[j]]=phi[i]*prime[j];
                                    break;            
                            }
                else phi[i*prime[j]]=phi[i]*phi[prime[j]];
            }
        }
    }
                    

     

    欧拉定理:a和p互质时,a^φ(p)1 (mod p),a在模p意义下的逆元为a^(φ(p)-1)

    费马小定理:p为质数且a不为p的倍数时,a^(p-1)1 (mod p),a在模p意义下的逆元为a^(p-2)

    可以用来处理大指数

  • 相关阅读:
    找到IOS中的闪退日志
    day10-单元测试用例
    1、MySQL索引优化分析
    大话处理器-第2章-初识处理器
    sunset: dusk
    CK: 00
    My File Server: 1
    [luogu 5049] 旅行(数据加强版)
    [luogu p1081] 开车旅行
    [luogu p1613] 跑路
  • 原文地址:https://www.cnblogs.com/xutianshu/p/10618670.html
Copyright © 2011-2022 走看看