快速* 模板

快速乘法取余

给定三个整数 \(a,n,mod\) ,求 \(a \times n ~\%~mod\) 的值。

inline int mult_mod(int a, int n, int mod)
{
    int ans = 0;
    while (n > 0)
    {
        if (n & 1)
            ans = (ans + a) % mod;
        a = (a + a) % mod;
        n >>= 1;
    }
    return ans;
}

这个东西好像没有必要的样子,貌似只需要 \((a~\%~mod)×(n~\%~mod)~\%~mod\) 即可。

快速幂

给定三个整数 \(a,n,mod\) ,求 \(a^n~\%~mod\) 的值。

ll ksm(ll a, ll b, ll mod)
{
    if (mod == 1)
        return 0;
    ll ans = 1;
    ll tmp = a % mod;
    while (b)
    {
        if (b & 1)
            ans = ans * tmp % mod;
        tmp = tmp * tmp % mod;
        b >>= 1;
    }
    return ans;
}
原文地址:https://www.cnblogs.com/EdisonBa/p/14948654.html