• poj 2480 Longge's problem


     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 }
  • 相关阅读:
    深入分析String类型(一)
    创建泛型类
    XML数据的读取—数据库配置文件
    Config配置文件读写
    jQuery动画
    设置屏幕快捷键
    jQuery事件
    jQuery操作DOM
    Python 二进制文件网址
    Centos使用crontab自动定时备份mysql的脚本
  • 原文地址:https://www.cnblogs.com/Bang-cansee/p/3724028.html
Copyright © 2020-2023  润新知