zoukankan      html  css  js  c++  java
  • POJ-2480 Longge's problem 积性函数

      题目链接:http://poj.org/problem?id=2480

      题意:多次求sigma(gcd(i,n), 1<=i<=n<2^32)

      这题不能直接搜了,需要考虑函数的性质。

      由gcd(i*j,n)=gcd(i,n)*gcd(j,n),所以gcd(i,n)为积性函数。

      设f(n)=Σ(gcd(i,n)),由定理:积性函数的和函数也是积性函数(具体数学上有)。

      所以f(x)=f(p1^a1*p2^a1*...*pn^an)=f(p1^a1)*f(p2*a2)*...*f(pn^an)。

      只要对每个f(pi^ai)求解就可以了,f(pi^ai)=1*phi(pi^ai)+pi^a1*phi(pi^(ai-1))+...+pi^ai*phi(1)。

      由phi(pi^ai) = pi^ai - pi^(ai-1),那么可以化简上面的式子:f(pi^ai) = ai * pi^ai - ai * pi^(ai-1) + pi^ai = pi^ai * (ai - ai/pi + 1);

     1 //STATUS:C++_AC_47MS_116KB
     2 #include <functional>
     3 #include <algorithm>
     4 #include <iostream>
     5 //#include <ext/rope>
     6 #include <fstream>
     7 #include <sstream>
     8 #include <iomanip>
     9 #include <numeric>
    10 #include <cstring>
    11 #include <cassert>
    12 #include <cstdio>
    13 #include <string>
    14 #include <vector>
    15 #include <bitset>
    16 #include <queue>
    17 #include <stack>
    18 #include <cmath>
    19 #include <ctime>
    20 #include <list>
    21 #include <set>
    22 //#include <map>
    23 using namespace std;
    24 //#pragma comment(linker,"/STACK:102400000,102400000")
    25 //using namespace __gnu_cxx;
    26 //define
    27 #define pii pair<int,int>
    28 #define mem(a,b) memset(a,b,sizeof(a))
    29 #define lson l,mid,rt<<1
    30 #define rson mid+1,r,rt<<1|1
    31 #define PI acos(-1.0)
    32 //typedef
    33 typedef __int64 LL;
    34 typedef unsigned __int64 ULL;
    35 //const
    36 const int N=110;
    37 const int INF=0x3f3f3f3f;
    38 const int MOD=100000,STA=8000010;
    39 const LL LNF=1LL<<60;
    40 const double EPS=1e-8;
    41 const double OO=1e15;
    42 const int dx[4]={-1,0,1,0};
    43 const int dy[4]={0,1,0,-1};
    44 const int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    45 //Daily Use ...
    46 inline int sign(double x){return (x>EPS)-(x<-EPS);}
    47 template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
    48 template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
    49 template<class T> inline T lcm(T a,T b,T d){return a/d*b;}
    50 template<class T> inline T Min(T a,T b){return a<b?a:b;}
    51 template<class T> inline T Max(T a,T b){return a>b?a:b;}
    52 template<class T> inline T Min(T a,T b,T c){return min(min(a, b),c);}
    53 template<class T> inline T Max(T a,T b,T c){return max(max(a, b),c);}
    54 template<class T> inline T Min(T a,T b,T c,T d){return min(min(a, b),min(c,d));}
    55 template<class T> inline T Max(T a,T b,T c,T d){return max(max(a, b),max(c,d));}
    56 //End
    57 
    58 LL ans,n;
    59 
    60 int main(){
    61  //   freopen("in.txt","r",stdin);
    62     LL i,j;
    63     LL cnt,t;
    64     while(~scanf("%I64d",&n)){
    65         ans=n;t=1;
    66         for(i=2;i*i<=n;i++){
    67             if(n%i==0){
    68                 cnt=0 ;
    69                 while(n%i==0){
    70                     cnt++;
    71                     n/=i;
    72                 }
    73                 ans+=ans*cnt/i*(i-1);
    74             }
    75         }
    76         if(n>1)ans=ans*(n*2-1)/n;
    77 
    78         printf("%I64d
    ",ans);
    79     }
    80     return 0;
    81 }
  • 相关阅读:
    Android中Context具体解释 ---- 你所不知道的Context
    JDK6、Oracle11g、Weblogic10 For Linux64Bit安装部署说明
    matplotlib 可视化 —— 定制 matplotlib
    matplotlib 可视化 —— 移动坐标轴(中心位置)
    matplotlib 可视化 —— 移动坐标轴(中心位置)
    matplotlib 可视化 —— 定制画布风格 Customizing plots with style sheets(plt.style)
    matplotlib 可视化 —— 定制画布风格 Customizing plots with style sheets(plt.style)
    指数函数的研究
    指数函数的研究
    指数分布的研究
  • 原文地址:https://www.cnblogs.com/zhsl/p/3281785.html
Copyright © 2011-2022 走看看