HDU 1452 Happy 2004(唯一分解定理)

【HDU 1452 Happy 2004(唯一分解定理)】知识的价值不在于占有,而在于使用。这篇文章主要讲述HDU 1452 Happy 2004(唯一分解定理)相关的知识,希望能为你提供帮助。
题目链接:传送门
题意:
求2004^x的全部约数的和。

分析:
由唯一分解定理可知
x=p1^a1*p2^a2*...*pn^an
那么其约数和 sum  = (p1^0+p1^1^…+p1^a1)*…* (pn^0+pn^1^…+pn  )
代码例如以下:

#include < iostream> #include < cstring> #include < algorithm> #include < cstdio> using namespace std; const int mod = 29; int quick_mod(int a,int b){ int ans = 1; while(b){ if(b& 1) ans=ans*a%mod; b> > =1; a=a*a%mod; } return ans; }int fac[10],cnt; int num[10]; void init(){ int n = 2004; cnt = 0; memset(num,0,sizeof(num)); for(int i=2; i*i< =n; i++){ if(n%i==0){ fac[cnt]=i; while(n%i==0) n/=i,num[cnt]++; cnt++; } } if(n> 1) fac[cnt]=n,num[cnt++]=1; }int main() { int n; while(~scanf("%d",& n)& & n){ init(); int ans = 1; for(int i=0; i< cnt; i++){ num[i]*=n; int inv = quick_mod(fac[i]-1,mod-2); ans=ans*((quick_mod(fac[i],num[i]+1)-1+mod)*inv%mod)%mod; } printf("%d\n",ans); } return 0; }


 
 


    推荐阅读