P2303 [SDOi2012]Longge的问题
题目背景
SDOi2012
题目描述
Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题。现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N)。
输入格式
一个整数,为N。
输出格式
一个整数,为所求的答案。
输入输出样例
输入 #1
6
输出 #1
15
说明/提示
对于60%的数据,0<N<=2^16
对于100%的数据,0<N<=2^32
代码
#include<cmath> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; long long n; int main () { scanf("%lld",&n); long long ans=n; for(long long i=2; i*i<=n; ++i) if(n%i==0) { int b=0; while(n%i==0) ++b,n/=i; ans/=i; ans*=b*i-b+i; } if(n>1) ans/=n,ans*=2*n-1; printf("%lld\n",ans); return 0; }