0
点赞
收藏
分享

微信扫一扫

快速幂取模运算

Gascognya 2022-08-23 阅读 156

1.模取运算的性质



(1)(a+b)%c = ((a%c)+(b%c))%c



(2)(a*b)%c = ((a%c)*b)%c



2.快速幂乘计算a^b



(1)a,b都为正数,将b二进制化



(2)时间复杂度为logb,乘法次数不是最少的



__int64 power = 1;

while(b > 0){

if(b&1) power *= a;

a *= a;

b >>= 1;

}

return power



3.快速模幂(蒙哥马利算法)



__int64Power(int a,int b,int c)

{

//计算(a^b)%c

int digit[32];

int i, k;

__int64 power=1;

i =0;

while(b)

{

digit[i++]= b%2;

b >>=1;

}

for(k = i-1; k >=0; k--)

{

power=(power* power)% c;

if(digit[k]==1)

{

power=(power * a)% c;

}

}

return power;

}



4、

int exp_mod(int a,int b,int n){

int r=1;

while(b){

if(b&1)r=(r*a)%n;

a=(a*a)%n;

b>>=1;

}

return r;

}

举报

相关推荐

0 条评论