1 /**
2 大意: 计算f(n) = ∑ gcd(i, N) 1<=i <=N.
3 思路: gcd(i,x*y) = gcd(i,x) * gcd(i, y ) 所以gcd 为积性函数
4 又因为积性函数的和函数 也是积性函数(具体数学,了解即可)
5 f(n) = f(p1^a1 * p2^a2 * p3^a3*......* pn^an )
6 = f(p1^a1) * f(p2^a2) * f(p3* a3) ......
7 现在我们先单独考虑一个 f(p1^a1)
8 f(p^k)=1*φ(p^k)+ p*φ[p^(k-1)]+p^2*φ[p^(k-2)]+…+ p^(k-1)*φ[p]+ p^k*φ[1]②
9 由欧拉函数性质知:φ(p^k)=(p-1)*p^(k-1)①
10
11 将①代入②得到:
12 f(p^k)= 1*φ(p^k) + p*φ[p^(k-1)] + p^2*φ[p^(k-2)] +…+ p^(k-1)*φ[p] + p^k*φ[1]
13 =1*(p-1)*p^(k-1)+p*(p-1)*p^(k-2)+ p^2*(p-1)*p^(k-3)+…+p^(k-1)*(p-1)+p^k (这要注意φ[1]=1不能代入①式求解)
14 =(p-1)*p^(k-1)+ (p-1)*p^(k-1)+(p-1)*p^(k-1)+…+(p-1)*p^(k-1)+ p^k
15 =k*(p-1)*p^(k-1)+ p^k
16 **/
17 #include <iostream>
18
19 using namespace std;
20
21 int main()
22 {
23 long long n;
24 while(cin>>n){
25 long long ans =1;
26 for(long long i=2;i*i<=n;i++){
27 long long tmp =1;
28 long long cnt =0;
29 while(n%i==0){
30 tmp *=i;
31 cnt++;
32 n = n/i;
33 }
34 ans *= (cnt*(i-1)*tmp/i + tmp);
35 }
36 if(n>1){
37 ans *= 2*n-1;
38 }
39 cout<<ans<<endl;
40 }
41 return 0;
42 }