#include<bits/stdc++.h>
using namespace std;
int kuai(int di,int mi)///非递归
{//如果取模在每个计算时都取模
int res=1;//用来返回结果
while(mi)// 一直循环到幂为0为止
{
if(mi&1)//二进制如果幂对应位为1则结果乘
{
res*=di;//
}
di*=di;//每次循环都乘以自己(2 4 8 16 32 64)对应二的次方
mi>>=1;//二进制位右移一位
}
return res;
}
int uai(int di,int mi)//递归
{//
if(mi==0)//结束
{
return 1;//
}
if(mi%2==1)//奇数
{
return uai(di,mi-1)*di;//mi-1*当前的
}
else//
{//
int temp=uai(di,mi/2);//储存否则会重复计算
return temp*temp;//分成两个
}//
}
int main()快速幂
{
int a,n;
scanf("%d %d",&a,&n);
printf("%d %d",kuai(a,n),uai(a,n));
}
参考:算法学习笔记(4):快速幂 - 知乎 (zhihu.com)