题目链接:传送门
题意:
求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;}
版权声明:本文为博主原创文章,,未经博主允许不得转载。
家!甜蜜的家!天下最美好的莫过於家