ACM:快速冪
阿新 • • 發佈:2019-01-05
快速冪計算:
a^11=a(2^0+2^1+2^3)
11的二進位制=1011=2^0+2^1+2^3;
所以:
#include <iostream> using namespace std; int main() { int a,b; //a為底數,b為權 cin>>a>>b; int ans=1; //結果 while(b!=0) { if(b&1) //b&1==0為偶數,b&1==1為奇數 { ans=ans*a; } a=a*a; b>>=1; //位運算,相當於除以2 } cout<<ans<<endl; return 0; }
快速冪取模:
積的取餘等於取餘的積的取餘。
(a*b)%c=((a%c)*(b%c))%c
#include <iostream> using namespace std; int main() { int a,b,mode; //a為底數,b為權 cin>>a>>b>>mode; a=a%mode; //預處理降低a的規模 ,防止a比mode大 int ans=1; //結果 while(b!=0) { if(b&1) //b&1==0為偶數,b&1==1為奇數 { ans=(ans*a)%mode; } a=(a*a)%mode; b>>=1; //位運算,相當於除以2 } cout<<ans<<endl; return 0; }