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;}

版权声明:本文为博主原创文章,,未经博主允许不得转载。

家!甜蜜的家!天下最美好的莫过於家

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

相关文章:

你感兴趣的文章:

标签云: