poj 1845 Sumdiv
2015-06-15 21:25
218 查看
poj 1845 Sumdiv
题意:
给出两个数a,b,求a^b的约数的和,结果模9901。
限制:
0 <= a,b <= 50000000
思路:
约数和公式:
对于已经分解的整数a=(p1^k1)*(p2^k2)*(p3^k3)*....*(pn^kn)
则,a的所有约数之和为
S=(1+p1+p1^2+p1^3+...p1^k1) * (1+p2+p2^2+p2^3+….p2^k2) * (1+p3+ p3^3+…+ p3^k3) * .... * (1+pn+pn^2+pn^3+...pn^kn)
然后a^b的约数和也就可以得到。
但有个要注意的地方是:
结果模9901,如果a比9901大,会出现问题,所以等比数列求和时要用到类似分治的思想。
题意:
给出两个数a,b,求a^b的约数的和,结果模9901。
限制:
0 <= a,b <= 50000000
思路:
约数和公式:
对于已经分解的整数a=(p1^k1)*(p2^k2)*(p3^k3)*....*(pn^kn)
则,a的所有约数之和为
S=(1+p1+p1^2+p1^3+...p1^k1) * (1+p2+p2^2+p2^3+….p2^k2) * (1+p3+ p3^3+…+ p3^k3) * .... * (1+pn+pn^2+pn^3+...pn^kn)
然后a^b的约数和也就可以得到。
但有个要注意的地方是:
结果模9901,如果a比9901大,会出现问题,所以等比数列求和时要用到类似分治的思想。
/*poj 1845 Sumdiv 题意: 给出两个数a,b,求a^b的约数的和,结果模9901。 限制: 0 <= a,b <= 50000000 思路: 约数和公式: 对于已经分解的整数a=(p1^k1)*(p2^k2)*(p3^k3)*....*(pn^kn) 则,a的所有约数之和为 S=(1+p1+p1^2+p1^3+...p1^k1) * (1+p2+p2^2+p2^3+….p2^k2) * (1+p3+ p3^3+…+ p3^k3) * .... * (1+pn+pn^2+pn^3+...pn^kn) 然后a^b的约数和也就可以得到。 但有个要注意的地方是: 结果模9901,如果a比9901大,会出现问题,所以等比数列求和时要用到类似分治的思想。 */ #include<iostream> #include<cstdio> using namespace std; #define LL long long const int MOD=9901; const int N=105; int f ,cnt ,tot; LL a_b_MOD_c(LL a,LL b,LL mod){ LL ret = 1; a %= mod; while(b){ if(b & 1) ret = ret * a % mod; a = a * a % mod; b >>= 1; } return ret; } //等比数列求和 //留意a=0的情况 LL dbsum(LL a,LL b,LL mod){ if(b==0) return 1; if(b&1) return (a_b_MOD_c(a,(b+1)/2,MOD)+1)*dbsum(a,b/2,MOD)%MOD; else return ((a_b_MOD_c(a,b/2,MOD)+1)*dbsum(a,(b-1)/2,MOD)%MOD + a_b_MOD_c(a,b,MOD))%MOD; } void gao(int n,int m){ //if(n==0){ puts("0"); return ; } tot=0; for(int i=2;i*i<=n;++i){ if(n%i==0){ f[tot]=i; cnt[tot]=0; while(n%i==0){ ++cnt[tot]; n/=i; } ++tot; } } if(n>1){ f[tot]=n; cnt[tot]=1; ++tot; } for(int i=0;i<tot;++i){ cnt[i]*=m; } LL ans=1; for(int i=0;i<tot;++i){ //cout<<dbsum(i)<<endl; ans=ans*dbsum(f[i],cnt[i],MOD)%MOD; } printf("%lld\n",ans); } int main(){ int n,m; scanf("%d%d",&n,&m); gao(n,m); return 0; }
相关文章推荐
- log4net学习2-项目应用
- ok
- 黑马程序员---2015.6.15java基础笔记---extends---final---interface
- Static关键字总结
- Android中SharedPreferences和序列化结合保存对象数据
- android的几个开源框架
- HTML格式自定义OpenCart邮件模板功能插件
- “老"程序员如何能保证自己一直立于不败之地?
- Linux 设备驱动开发目录
- HMM的概率计算问题和预测问题的java实现
- opencv中相关的矩阵运算
- hdu 1785 整理下水题 排序
- HTML格式自定义OpenCart邮件模板功能插件
- elasticsearch spring 集成
- 【Android界面实现】解决ScrollView中嵌套Listview,Listview中嵌套Listview显示不完整和滑动冲突的问题
- UML状态图
- Revit2016不在提供单独下载包而是只包含在Building Design Suite里面
- 【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第二课:游戏开发技术
- :hover
- struts2+json