首页 > 代码库 > 快速幂算法

快速幂算法

快速幂就是快速算出某个数的多少次幂a^b

普通方法O(n)不解释:

技术分享
 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstdlib> 5 #include<iomanip> 6 #include<algorithm> 7 using namespace std; 8 int main() 9 {10     int a=10,b=5,m;11     m=a;12     a=1;13     while(b>0)14     {15         if(b&1)a=a*m;16         b>>=1;17         m=m*m;18     }19     cout<<a;20     return 0;21 }
View Code

 

快速幂O(log?N):

把b转化成二进制

例如: 10的而二进制为1010

并且10=2^1+2^3

因此a^10=a^(2^1)*a^(2^3) 代码:

技术分享
 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstdlib> 5 #include<iomanip> 6 #include<algorithm> 7 using namespace std; 8 int main() 9 {10     int a=10,b=5,m;11     m=a;12     a=1;13     while(b>0)14     {15         if(b&1)a=a*m;16         b>>=1;17         m=m*m;18     }19     cout<<a;20     return 0;21 }
View Code

 

快速幂算法