首页 > 代码库 > 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; }
HDU 1452 Happy 2004(唯一分解定理)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。