lightoj 1054 - Efficient Pseudo Code 求所有n^m的所有因子和
来源:互联网 发布:php观察者模式适用于哪 编辑:程序博客网 时间:2024/04/28 10:14
题意:求n^m的所有因子和。
题解:我们需要先知道,一个数X=p1^t1*p2^t2*...*pk^tk(pi为素数),还需要知道X的所有因子和sum(X)=(p1^0+p1^1+...+p1^t1)*...*(pk^0+pk^1+...+pk^tk)。证明略,以前证明过,可以自己在我其他文中找下,好像那题跟这题一样,就是因子都是排列组合ti得到的。所以结果就很简单了,n^m=p1^(t1*m)*...pk^(tk^m);还需要筛选下素数,和快速幂以及等比数列求和,还有除法取余(这个就是逆元和费马定理:a/b%mod=a*b^(mod-2)%mod)。
#include <cstdio>#include <cstring>#include <cmath>#include <iostream>#include <algorithm>using namespace std;#define LL long longconst int mod=1e9+7;const int maxn=1e5+10;LL prime[maxn],vis[maxn],t;void init(){ LL i,j,k,m; t=0; m=(LL)sqrt(maxn+0.5); memset(vis,0,sizeof(vis)); for(i=2;i<=m;i++) { if(!vis[i]) for(j=i*i;j<maxn;j+=i) vis[j]=1; } for(i=2;i<maxn;i++) if(!vis[i])prime[t++]=i;}LL pow_mod(LL a,LL b){ LL s=1; while(b) { if(b&1)s=(s*a)%mod; a=(a*a)%mod; b=b>>1; } return s;}LL find(LL a,LL b){ LL ans; ans=pow_mod(a,b)-1; ans=ans*pow_mod(a-1,mod-2)%mod; ans=(ans+mod)%mod; return ans;}int main(){ init(); LL n,m,T,tt=0; scanf("%lld",&T); while(T--) { scanf("%lld%lld",&n,&m); LL i,j,k,num; LL ans=1; for(i=0;i<t&&prime[i]*prime[i]<=n;i++) { if(n%prime[i]==0) { num=0; while(n%prime[i]==0){n=n/prime[i];num++;} //cout<<find(prime[i],m*num+1)<<endl; ans=ans*find(prime[i],m*num+1)%mod; } } if(n>1) ans=ans*find(n,m+1)%mod; printf("Case %lld: %lld\n",++tt,ans); } return 0;}
- lightoj 1054 - Efficient Pseudo Code 求所有n^m的所有因子和
- LightOJ 1054 - Efficient Pseudo Code (求n^m的因子和)
- Light OJ 1054 Efficient Pseudo Code 求n^m的约数和
- LightOj 1054 Efficient Pseudo Code
- 求N的所有因子
- 求n以内的所有因子数
- lightoj 1014 求一个数的所有因子
- 求n-m之间所有数额和
- LightOJ 1336 Sigma Function(1--n中所有因子和为偶数的数字个数)
- poj_1845_求所有a^b的所有因子和
- HDU 1452 Happy 2004 求2004^n的所有因子和 积性函数应用
- Light oj 1054 - Efficient Pseudo Code
- Light OJ 1054 - Efficient Pseudo Code
- 求m-n之间的所有素数
- 求n!中因子m的个数
- 求N以内所有质数的和
- 求集合{1,2,...,n}的长度小于M(M<=n)的所有子集
- 求集合{1,2,...,n}的长度等于M(M<n)的所有子集
- ERROR:transport error 202 ...ERROR: JDWP Transport dt_socket failed to initialize...
- 远程桌面方法
- 编写一个既可以求和也可以求积的函数。
- UML中的六大关系
- VS2010 RDLC报表制作详解 ,分组,空白页,合计,数据集,参数,页数
- lightoj 1054 - Efficient Pseudo Code 求所有n^m的所有因子和
- PostgreSQL中关于时间计算的问题
- Impdp Fails with ORA-39126 ORA-911 During Create Function (文档 ID 1254246.1)
- Ural 1052
- 完全理解数组与指针(2 )
- android 启动流程
- c语言从键盘上输入一串字符串,统计这个字符串中存在的数字和字母的总数
- Ant 脚本的condition标签
- 编写程序,测试由键盘输入的整数n是否含有数字5,若含有5,则输出“yes”,否侧输出“no”