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;
}

浙公网安备 33010602011771号