標籤:php 分析 acm 約數和 mil sum main show pre
題目連結:傳送門
題意:
求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;}
HDU 1452 Happy 2004(唯一分解定理)