您的位置:首页 > 其它

快速幂运算(数论知识)

2017-04-27 19:11 246 查看
转自百度,综合了一下。
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: