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

输入(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;
}
原文地址:https://www.cnblogs.com/Kan-kiz/p/10697748.html