快速幂取模

利用二进制扫描的方法快速的计算ab mod c,显然用常规方法计算74237 mod 4233计算量过大。

基本原理:(a×b)mod c=((a mod c)×b)mod c

例如:35 mod 7=3(101)2 mod 7=((3(100)2 mod 7)×3)mod 7=((9(10)2 mod 7)×3)mod 7=(((9 mod 7)(10)2 mod 7)×3)mod 7=((2(10)2 mod 7)×3)mod 7=((4(1)2 mod 7)×3)mod 7=(4×3)mod 7=5

实现代码如下(C语言版)

1 int exp_mod(int a,int b,int n){
2 int r=1;
3 while(b){
4 if(b&1)r=(r*a)%n;
5 a=(a*a)%n;
6 b>>=1;
7 }
8 return r;
9 }

时间复杂度分析:若a、b、n都是β位数,则所需算术运算的次数是O(β),所需位操作总次数是O(β3)

posted @ 2012-01-18 15:44  狼の禅  阅读(1102)  评论(0编辑  收藏  举报
我要啦免费统计