[笔记] 简单数论定理
费马小定理
当 \(a,p\in \mathbb{Z}\) 且 \(p\) 为质数,且 \(a\not\equiv 0\pmod{p}\) 时有:\(a^{p-1}\equiv 1\pmod{p}\)。
所以 \(a^b\equiv a^{b\bmod (p-1)}\pmod p\)。
欧拉定理
当 \(a,m\in \mathbb{Z}\),且 \(\gcd(a,m)=1\) 时有: \(a^{\varphi(m)}\equiv 1\pmod{m}\)。
这里 \(\varphi(x)\) 是数论中的欧拉函数。
所以 \(a^b\equiv a^{b\bmod \varphi(m)}\pmod m\)。
扩展欧拉定理
当 \(a,m\in \Z\) 且 \(\gcd(a,m)\ne 1\) 时有:
\(a^b\equiv\left\{\begin{matrix}a^b&,b<\varphi(m)\\a^{(b\bmod\varphi(m))+\varphi(m)}&,b\ge\varphi(m)\end{matrix}\right.\pmod m\)
(第一种状况的含义是,如果 \(b<\varphi(m)\) 的话,那么就不能降幂。一般题目中 \(m\) 不会太大,则此时复杂度可以接受。而如果 \(b\ge\varphi(m)\) 的话,那么复杂度可能超出预期,这个时候需要降幂来降低复杂度)
ExCRT
个人认为比 CRT 更加好理解和记忆。
假设有 \(n\) 个同余方程:
可以直接使用 Exgcd 将这些同余方程合并:
根据这一点,用 Exgcd 求出 \(k_1,k_2\) 即可将方程合并。
卢卡斯定理
用于模数为质数,但是较小的时候,求组合数:
当模数不是质数时,如果分解质因数,每个质因数的次数都为 \(1\),那么分开做,再用 CRT 合并即可。
否则要用到 ExLucas。
库默尔定理
设 \(m,n\) 为正整数,\(p\) 为素数,则 \(\dbinom{n + m}{m}\) 含 \(p\) 的幂次等于 \(m+n\) 在 \(p\) 进制下的进位次数。