算法笔记 P136
#include <stdio.h>
#include <string.h>
typedef long long ll;
//快速幂的递归写法
ll binaryPow(ll a,ll b,ll m)
{
if(b==0)
{return 1;}
if(b%2==1) {return(a*binaryPow(a,b-1,m))%m;}
else {
ll mul;
mul=binaryPow(a,b/2,m);
return (mul*mul%m);
}
}
//快速幂的迭代写法
ll binaryPow(ll a,ll b,ll m)
{
ll ans;
ans =1;
while(b>0)
{
if(b&1)//如果B的二进制末尾为1,也可以写作 id(b%2)
{
ans=ans*a%m;
}
a=a*a%m;
b>>=1;
}
return ans;
}
int main()
{
int a,b,m,end;
scanf("%d %d %d",&a,&b,&m);
end=binaryPow(a,b,m);
printf("%d的%d次方对%d取余为%d",a,b,m,end);
}
- 或许注意的细节:如果初始值 A 可能大于等于 M ,进入函数之前对 A 于 M 取整(后期发挥作用的也是每次取整留下来的部分,这样计算或许更加方便。另外也可以把数全部算完最后取整)
- 判断 M 是否为 1 ,直接得 0 .