【模板】快速幂&取余运算

时间:2023-03-08 16:35:23

输入\(b\),\(p\),\(k\)的值,求\(b^p mod k\)的值。其中\(b\),\(p\),\(k^2\)为长整型数。

1.普通做法

\(print\) \(pow(b,p)\ mod\ k\)

详见数据范围。如果直接使用pow函数,就会爆精度qwq。

于是我们需要手动执行幂运算。

2.依然是普通做法
for (int i=1;i<=p;i++)
{
ans*=b;
ans%=k;
}

由于p很大,所以会T飞qwq

3.(依靠位运算的)快速幂
#include <cstdio>
#define ll long long
ll k;
ll power(ll a,ll b)
{
ll ans=1,base=a;
while (b>0)
{
if (b&1)
{
ans*=base;
ans%=k;
}
base*=base;
base%=k;
b>>=1;
}
return ans;
}
int main()
{
ll b,p;
scanf("%lld%lld%lld",&b,&p,&k);
printf("%lld^%lld mod %lld=%lld",b,p,k,power(b,p)%k);
return 0;
}