分析:因为:gcd(i,m*n)=gcd(i*m)*gcd(i*n),n与n互质,由于积性函数的和也是积性函数,f(n)=sgma(gcd(i,N),1<=i<=N,则f(n)=sum(p*phi(n/p)),p是n的一个因子,由此:
f(p^r)=r*(p^r-p^(r-1))+p^r;
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std ;
int main()
{
int r;
long long x,sum,n;
while(scanf("%lld",&n)!=EOF){ //f(pi^r)=r(pi^ri-pi^(ri-1))+pi^ri,n=(p1^r1)*(p2^r2)....;
sum=1;
for(long long i=2;i*i<=n;i++){
if(n%i==0){
n/=i;
x=i,r=1;
while(n%i==0){
x*=i;
r++;
n/=i;
}
sum*=(r+1)*x-r*x/i;
}
}
if(n>1) sum*=2*n-1;
printf("%lld\n",sum);
}
return 0 ;
}