#include <iostream>
#include <cstdio>
using namespace std;
typedef long long int ll;
ll mi(ll a,ll b)//递归方法:b为奇数则a^b=a*a^(b-1),其中b-1又为偶数;b为偶数则a^b=a^(b/2)*a^(b/2)
{
if(b==0) return 1;
if(b&1) return a*mi(a,b-1);
else{
ll c=mi(a,b/2);
return c*c;
}
}
ll mi(ll a,ll b)//非递归方法:例如a=2,b=9;则b=1001,另外2^9=2^8*2^1其中8=2^3,1=2^0对应b的二进制的1位
{
ll ans=1;
while(b>0)
{
if(b&1)
ans=ans*a;
a=a*a;
b=b>>1;
}
return ans;
}
int main()
{
ll a,b;
cin>>a>>b;
cout<<mi(a,b);
}
快速求幂的递归与非递归的方法
猜你喜欢
转载自blog.csdn.net/weixin_44142774/article/details/113075856
今日推荐
周排行