快速幂取模运算

来源:互联网 发布:苹果电脑设计软件下载 编辑:程序博客网 时间:2024/06/11 23:59

 

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,intn){

   int r=1;

   while(b){

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

       a=(a*a)%n;

       b>>=1;     

   }

   return r;

}

0 0