快速幂取模

来源:互联网 发布:培训机构做网络推广 编辑:程序博客网 时间:2024/06/14 11:25

快速幂取模

快速幂算法依赖于以下的公式:

也就是说b个a,第一次拿出来两个,第二次拿出第一次的二倍。。。就是2 4 8 16这样复杂度就变成了logb。

#include<cstdio>

using namespace std;int ans;int power1(int a,int b,int c)//普通方法//{ans=1;//同余定理 ab(a的b次方) mod c = (a mod c)b(b次方) mod c//for(int i = 1 ; i <=b ; i++){ans=(ans*a)%c;}return ans;}int power2(int a,int b,int c){ans = 1;a=a%c;while(b){if(b&1)//如果b是奇数//ans=(ans*a)%c;a=(a*a)%c;b >>= 1;//b=b/2// }return ans;}int main(){int a,b,c;while(~scanf("%d%d%d",&a,&b,&c)){printf("%d",power1(a,b,c));printf("%d",power2(a,b,c));}return 0;}
一个练习:http://acm.hpu.edu.cn/vjudge/contest/view.action?cid=10#problem/J



愿你一生清澈明朗,做你愿做之事,爱你原爱之人!
原创粉丝点击