a^b%c问题 ---模板
来源:互联网 发布:对象转成json 编辑:程序博客网 时间:2024/05/21 15:38
(1) ABmod C.(1<=A,B<2^62, 1 <= C <= 10^9)
http://acm.bit.edu.cn/mod/programming/view.php?a=530
快速幂----二分
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>using namespace std;long long quickpow(long long n,long long m,long long p){long long t=1;while(m){if(m&1) t=(t*n)%p;m=m>>1;n=(n*n)%p;}return t;}int main(){long long a,b,c;while(~scanf("%lld%lld%lld",&a,&b,&c)){a%=c; //a要先做处理printf("%lld\n",quickpow(a,b,c));}}
(2)ABmod C.(1<=A,B,C<2^62)
http://acm.bit.edu.cn/mod/programming/view.php?id=696
c的范围变为 long long ,a%=c后,a的范围还是long long.当二分乘时,a*a会超long long,
这是,我们把两个数相乘a*b也用二分算,a*b==(a*2) * (b/2);
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>using namespace std;long long cheng(long long a,long long b,long long p){long long t=0;while(b){if(b&1) t=(t+a)%p;b=b>>1;a=(a+a)%p;}return t;}long long quickpow(long long n,long long m,long long p){long long t=1;while(m){if(m&1) t=cheng(t,n,p);m=m>>1;n=cheng(n,n,p);}return t;}int main(){long long a,b,c;while(~scanf("%lld%lld%lld",&a,&b,&c)){a%=c;printf("%lld\n",quickpow(a,b,c));}}
(3) A^B mod C. (1<=A,C<=1000000000,1<=B<=10^1000000).
http://acm.bit.edu.cn/mod/programming/view.php?a=542
b是高精度,
有公式:
公式具体内容:http://hi.baidu.com/aekdycoin/item/e493adc9a7c0870bad092fd9
对b进行处理,讲b处理为 int 型数。然后用快速幂就可以了,
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>using namespace std;long long quickpow(long long n,long long m,long long p){long long t=1;while(m){if(m&1) t=t*n%p;m=m>>1;n=n*n%p;}return t;}long long eular(long long n){ long long ret=1,i; for (i=2;i*i<=n;i++) if (n%i==0){ n/=i,ret*=i-1; while (n%i==0) n/=i,ret*=i; } if (n>1) ret*=n-1; return ret; }char b[1000005];int main(){long long a,c;while(~scanf("%lld%s%lld",&a,b,&c)){a%=c;long long tb=0;long long phic=eular(c);int flag=0;int len=strlen(b);for(int i=0;i<len;i++){tb=tb*10+b[i]-'0';if(tb>=phic) tb%=phic,flag=1;}if(flag==1) tb+=phic;printf("%lld\n",quickpow(a,tb,c));}}(4)如果a,b都是高精度,则:
对a,进行a%=c;处理,将a,变为int 型
对b,用上述公式处理,将b,变为int型
然后用快速幂,就可以了
- a^b%c问题 ---模板
- A+B+C问题
- A+B+C问题
- A+B+C问题
- HDU5698(排列组合 C(a,b)modP 模板 )
- A^B mod C(快速幂模板)
- 计蒜客 A+B+C问题
- 问题 C: 计算A+B
- 人工智能 a b c 说谎问题
- 第1题:A+B+C问题
- 1.A+B+C问题(Java)
- 计蒜客 Python课程 A+B+C问题
- 计蒜客之A+B+C问题
- Java - 计蒜客 - A+B+C问题
- $a && $b = $c的问题
- java-计蒜客-A+B+C 问题
- 计蒜客挑战难题:A+B+C问题
- C语言基础之A+B问题
- Flash字体嵌入方法
- HDU3530
- 全局最小割
- 绑定服务:调用服务内部的方法
- opencv在Linux下的安装及其测试
- a^b%c问题 ---模板
- 大数阶乘Java实现
- ACM题目:第一行输入n m,第二行输入一个数列,n为数列长度,m为要插入的值,排序后输出,m n为零时退出程序
- 在VS2008中使用jQuery智能感应的方法
- 未来期望与目标
- ios Socket套接字编程
- POJ 1286 Necklace of Beads
- WebSphere 各种dump
- RFC 879