知识概览
龟速乘类似于快速幂。快速幂用乘法来实现乘方,龟速乘用加法来实现乘法。
快速幂代码
int qmi(int a, int k, int p)
{
int res = 1;
while (k)
{
if (k & 1) res = res * a % p;
a = a * a % p;
k >>= 1;
}
return res;
}
例题展示
题目链接
https://www.acwing.com/problem/content/92/
来源
《算法竞赛进阶指南》
代码
#include <cstdio>
typedef long long LL;
LL qadd(LL a, LL b, LL p)
{
LL res = 0;
while (b)
{
if (b & 1) res = (res + a) % p;
a = (a + a) % p;
b >>= 1;
}
return res;
}
int main()
{
LL a, b, p;
scanf("%lld%lld%lld", &a, &b, &p);
printf("%lld\n", qadd(a, b, p));
return 0;
}
参考资料
- AcWing算法基础课