快速幂运算(数论知识)

来源:互联网 发布:淘宝众筹不成功会怎样 编辑:程序博客网 时间:2024/04/30 04:42

转自百度,综合了一下。

https://wenku.baidu.com/view/d65f294702768e9951e73883.html

typedef long long ll; //注意这里不一定都是long long 有时 int也行

ll mod_pow(ll x, ll n, ll mod){

   ll res = 1;

   while( n > 0 ){

       if( n & 1 ) res = res * x % mod;   //n&1其实在这里和 n%2表达的是一个意思

       x = x * x % mod;

       n >>= 1;                //n>>= 1这个和 n/=2表达的是一个意思

   }

   return res;

}

递归版的

typedef long long ll;

ll mod_pow(ll x, ll n, ll mod){

   if( n == 0 ) return 1;

   ll res = mod_pow( x * x % mod, n / 2, mod );

   if( n & 1 ) res = res * x % mod;

   return res;

}

 

 

ll ans=1;

a=a%c;   //先简化一下a

while(b>0)

{

      If(b%2==1) //奇数会多乘一项a%c

ans=ans*a%c;

b=b/2

a=(a*a%c;

}

return ans;

0 0