讲完快速乘了,把快速幂的原理一说贴代码就完了
快速幂本质貌似是利用二进制优化去减少乘法的运算次数,快速乘是质变(运算方式的改变),而快速幂是量变,运算次数把n变成logn
因为最简单的想法就是跑一个for循环,去计算幂
for(i=1;i<50;i++)
res = a*a;//计算a的50次方
那么用二进制优化优化之后就是。。。。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ab_addc(ll a,ll b)
{
ll res=1;//这里是0,快速幂是1
while(b){
if(b&1)//位运算
res=res*a;//这里是加,快速幂是乘
a=a*a;
b>>=1;//效果等价与/=2
}
return res;
}
int main()
{
ll a,b;
while(cin >> a >> b){
ll MOD = ab_addc(a,b);
printf("%lld\n",MOD);
}
}