【数论】——欧拉定理与快速幂

412 阅读1分钟

【数论】——欧拉定理与快速幂

欧拉定理

  • 若正整数 a,b 互质,则有:(其中:phi(n) phi(n) 为欧拉函数)
aϕ(n)1(mod n)a^{\phi(n)}\equiv 1\qquad (mod\ n)

推论

  1. 费马小定理 若 p 是质数,则对于任意整数 a,有:
ap11(mod p)a^{p-1}\equiv 1\qquad (mod\ p)
  • 证明(构造函数法)——(来自 李煜东 《算法竞赛进阶指南》) 在这里插入图片描述
  1. 若正整数 a,n 互质,则对任意正整数 a 有:
abap mod ϕ(n)(mod n)a^b \equiv a^{p\ mod \ \phi(n)}\qquad(mod\ n)
  • 证明(构造函数法)——(来自 李煜东 《算法竞赛进阶指南》) 在这里插入图片描述

快速幂

  • 反复平方法 k 位二进制可以表示所有 [1,2k12^k-1] 的所有数(状态压缩),由此性质,对于给定一个取模数 p,预处理:
a20 (mod p),a21(mod p),...,a2k(mod p)a^{2^0}\ (mod\ p),a^{2^1}(mod\ p),...,a^{2^k}(mod\ p)

然后将根据所求数的二进制表示每一位取出相乘即可求出要求的幂。

  • 代码
int qickmi(int a,int k,int p)// a^k%p
{
    int res = 1;
    // 要转为 LL 防止溢出
    while(k){if(k&1)
            res = (long long)res * a % p;
        a = (long long)a * a % p;
        k >>= 1;
    }
    return res;
}

乘法逆元

  • 定义 若 b,m 互质,并且有 bnb\mid n,则存在一个整数 x,使得
abax(mod m)\frac{a}{b} \equiv a *x\qquad (mod\ m)

xb mod m 的乘法逆元,记作:

b1(mod m)b^{-1} \qquad (mod\ m)

变形后也可以得到:

bb1(mod m)b*b^{-1} \equiv \qquad (mod\ m)
  • 如果m是质数,则根据费马小定理:
bm11(mod m)b^{m-1} \equiv 1 \qquad (mod\ m)

代入上式

bbm11(mod m)b*b^{m-1} \equiv 1 \qquad (mod\ m)

根据乘法逆元定义式,此时b的乘法逆元为:

bp2b^{p-2}
  • 调用快速幂即可求出逆元,在求组合数时会派上用场