【欧拉函数】51Nod1040[最大公约数之和]题解

来源:互联网 发布:弹幕朗读软件 编辑:程序博客网 时间:2024/06/03 04:03

题目概述

[1,n]ngcd 和。

解题报告

对于 n 的因子 x ,只有 gcd(n,i)=xix 的贡献,也就是 gcd(nx,ix)=1i

然后贡献其实就是 x×ϕ(n/x)

示例程序

#include<cstdio>#include<cmath>using namespace std;typedef long long LL;const int maxs=31622;int n,S;LL ans;inline int phi(int x){    int sum=x;for (int i=2,S=sqrt(x);i<=S;i++) if (x%i==0) {sum=sum/i*(i-1);while (x%i==0) x/=i;}    if (x>1) sum=sum/x*(x-1);return sum;}int main(){    freopen("program.in","r",stdin);    freopen("program.out","w",stdout);    scanf("%d",&n);S=sqrt(n);    for (int i=1;i<=S;i++) if (n%i==0)    {        int t=n/i;ans+=(LL)i*phi(t);        if (i!=t) ans+=(LL)t*phi(i);    }    return printf("%lld\n",ans),0;}
原创粉丝点击