2705: [SDOI2012]Longge的问题|欧拉函数

来源:互联网 发布:菲尼克斯之光 知乎 编辑:程序博客网 时间:2024/06/06 10:39

枚举gcd,求出当前枚举的gcd出现的次数,也就是求个欧拉函数

#include<algorithm>#include<iostream>#include<cstdlib>#include<cstring>#include<vector>#include<cstdio>#include<queue>#include<cmath>#include<set>#include<map>#define ll long longusing namespace std;ll n,ans,m;long long phi(ll x){    ll ans=x,y=sqrt(x);    for(int i=2;i<=y;i++)        if(x%i==0)        {            ans=ans/i*(i-1);            while(x%i==0)x/=i;        }    if(x>1)ans=ans/x*(x-1);    return ans;}int main(){    cin>>n;m=sqrt(n);    for(int i=1;i<=m;i++)        if(n%i==0)        {            ans+=phi(n/i)*i;            if(i*i!=n)ans+=phi(i)*(n/i);        }    cout<<ans;    return 0;}
0 0
原创粉丝点击