首页 > 其他 > 详细

noip复习——快速幂

时间:2019-05-05 12:46:46      阅读:142      评论:0      收藏:0      [点我收藏+]

\(a ^ n \bmod p\)


\(a, p, n \leq 10^9\)

最普通的二进制拆分

#define LL long long
LL qpow(LL a, LL n, LL p)
{
    LL ans = 1;
    for (; n; n >>= 1, a = a * a % p)
        if (n & 1)
            ans = ans * a % p;
}

\(a, p, n \leq 10^{14}\)

底数变大了,直接做\(a * a\)会爆longlong,需要用类似快速幂的方法做乘法

#define LL long long
LL mul(LL a, LL n, LL p)
{
    LL ans = 0;
    for (; n; n >>= 1, a = (a << 1) % p)
        if (n & 1)
            ans = (ans + a) % p;
}
LL qpow(LL a, LL n, LL p)
{
    LL ans = 1;
    for (; n; n >>= 1, a = mul(a, a, p))
        if (n & 1)
            ans = mul(ans, a, p) % p;
}

\(a, p \leq 10^{14}, \ n \leq 10 ^ {100}\) \((a \perp p)\)

初看数据范围,出题人在搞事情。其实只是用了一个欧拉定理的结论:

\[a^n \equiv a^{n \bmod \varphi(p)} \pmod p\ \ \ (a \perp p)\]

\(O(\sqrt{n})\)\(\varphi(p)\),n先读字符串然后按快读的方式处理即可。


\(a, p \leq 10^{14}, \ n \leq 10 ^ {100}\)

\(a, p\)互质的条件去掉了怎么办?当\(n \leq \varphi(p)\)时可以直接算,否则用到以下结论:

\[a^n \equiv a^{n \bmod \varphi(p) + \varphi(p)} \pmod p\]

noip复习——快速幂

原文:https://www.cnblogs.com/happyLittleRabbit/p/10812279.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!