比如 1 2 3 4 5 6
1和6互质,5和6互质,2 3 4 和6不互质 (互质的意思是两个数的最大公约数为1)
所以
求欧拉函数的公式为:
其中,p1, p2, ..., pk是n的所有质因子。
验证: 利用容斥原理证明
证明:
延申可得:
若a与n互质,那么
比如
#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;
}