欧拉函数

139 阅读1分钟

比如 1 2 3 4 5 6

1和6互质,5和6互质,2 3 4 和6不互质 (互质的意思是两个数的最大公约数为1

所以φ(6)=2φ(6)=2

欧拉函数的公式为:

φ(n)=n×(11/p1)×(11/p2)×...×(11/pk)φ(n) = n × (1 - 1/p1) × (1 - 1/p2) × ... × (1 - 1/pk)其中,p1, p2, ..., pk是n的所有质因子。

验证: 利用容斥原理证明 φ(6)=(11/2)×(11/3) φ(6)=(1-1/2) × (1-1/3)

=6×1/2×2/3=6 × 1/2 × 2/3

=3×2/3 =3 × 2/3

=2=2

证明:

171555_327b96e713-欧拉函数1.jpg

延申可得:

若a与n互质,那么(aφ)n1mod1)(a^φ)n ∈ 1(mod1)

比如(5φ)6mod6=25mod6=1 (5^φ)^6 mod 6 =25mod6=1

image.png 873. 欧拉函数 - AcWing题库

#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
    
    int t=0;
    cin>>t;
    
    while(t--)
    {
        int  n=0;
        cin>>n;
        
        long long res=n;
                //先求一下质因子
            for(int i=2;i<=n/i;i++)
            {
                  if(n%i==0)
                  {

                          res=res/i*(i-1);//欧拉公式
                          while(n%i==0)n/=i;//把i除尽
                  }
            }     
            if(n>1)res=res/n*(n-1);//for循环的外部,以确保在所有质因子处理完后再执行。
            cout<<res<<endl;
    }

    return 0;
}