问题描述
- 给定三个正整数a、b、m(a<109,b<106,1<m<109)求ab%m.
方法一 循环
typedef long long LL;
LL f(LL a, LL b, LL m)
{
LL ans = 1;
for (int i = 0; i < b; i++)
{
ans = ans * b % m;
}
return ans;
}
方法二 快速幂递归
typedef long long LL;
LL mypow(LL a, LL b, LL m)
{
if (b == 0)
return 1;
if (b & 1)
return a * mypow(a, b - 1, m) % m;
else
{
LL temp = mypow(a, b / 2, m);
return temp * temp % m;
}
}
方法三 快速幂迭代
typedef long long LL;
LL mypow(LL a, LL b, LL m)
{
LL ans = 1;
while (b > 0)
{
if (b & 1)
{
ans = ans * a % m;
}
a = a * a;
b >> 1;
}
return ans;
}