迭代算法
补充知识:
- ab%m=(a%mb%m)%m;
#include <cstdio>
typedef long long LL;
LL binaryPow(LL a,LL b,LL m)
{
LL ans=1;
if(m==1) ans=0;
else
{
while(b>0)
{
if(b&1)//保证二进制最后一位是1 如果是0就不计入答案里边啦
{
ans =ans*a%m;
}
a=a*a%m;
b=b/2;//(也可以用 b >>=1)就是把二进制数向右移一位
}
}
return ans;
}
int main()
{
LL a,b,m;
scanf("%lld %lld %lld",&a,&b,&m);
printf("%lld^%lld mod %lld=%lld",a,b,m,binaryPow(a,b,m));
return 0;
}
递归算法
注意偶数返回的时候不要直接返回两个递归相乘
#include <cstdio>
typedef long long LL;
LL generateP(LL a,LL b,LL m) //传入指数以及幂
{
LL mul;
if(b==0) return 1;
if(b%2==1)
{
return a*generateP(a,b-1,m)%m;
}
else
mul=generateP(a,b/2,m); //不要直接返回generate*generate
return mul*mul%m;
}
int main()
{
LL a,b,m;
scanf("%lld %lld %lld",&a,&b,&m);
printf("%lld",generateP(a,b,m));
return 0;
}