jzoj1164-求和【欧拉函数,数论】(筛欧拉函数模板)

正题


大意

给出一个 n ,求 1 n 里面和 n 互质的数的和。


解题思路

φ ( i ) 表示的就是 1 i 里面和 i 互质的个数。然后数字和就是 φ ( i ) i / 2


代码

#include<cstdio>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
ll a,ans,n;
int main()
{
    scanf("%lld",&a);
    n=a;
    ans=a;
    for (ll i=2;i<=sqrt(a);i++)
        if (a%i==0){
            ans=ans/i*(i-1);//计算
            while(a%i==0) a/=i;//取出质数
        }
    if (a>1) ans=ans/a*(a-1);//处理a=2的特判
    printf("%lld",n*ans/2);
}

猜你喜欢

转载自blog.csdn.net/mr_wuyongcong/article/details/80978477