取模专题
快速取模:
令 \(m = \frac{2^{64}}{p}\),则 \(x\bmod p=x-(m*x \bmod 2^{64})*p\),模 \(2^{64}\) 可以直接自然溢出。
struct Mod
{
ll m, p;
void init(int pp) { m = ((__int128_t)1 << 64) / pp; p = pp; }
ll operator ()(ll x)
{
return x - ((__int128_t(x) * m) >> 64) * p;
}
} mod;
\(\text{Exgcd}\) :
求 \(ax+by=c\) 的一组可行解。先求 \(ax+by=\gcd(a,b)\) 的解,再乘个系数就行了。
\(\text{Progress}\) :
\[\large
\begin{aligned}
ax+by&=\gcd(a,b)\\
&=\gcd(b,a\bmod b)\\
&=bx'+y'(a-\lfloor \frac{a}{b} \rfloor \times b)\\
&=ay'+b(x'-y'\lfloor \frac{a}{b} \rfloor)
\end{aligned}
\]
ing exgcd(int a,int b,int &x,int &y){
if(!b) {
x=1,y=0;
return a;
}
int d=exgcd(b,a%b,y,x);
y-=(a/b)*x;
return d;
}
\(\text{Lucas}\):
以下提及的 \(p\) 均为质数。
\[\large {m \choose n} \equiv {m \bmod p \choose n \bmod p} \times { \left \lfloor m/p \right \rfloor \choose \left \lfloor n/p \right \rfloor } \mod p
\]
引理 \(1\):当 \(x\) 为小于 \(p\) 正整数时,\({p \choose x} \equiv 0 \mod p\)
证明 :
\[\begin{aligned}
{p \choose x} &= \frac{p}{x} \cdot \frac{(p-1)!}{(x-1)!(p-1-(x-1))!} \\
&= \frac{p}{x} \cdot {p-1 \choose x-1}
\end{aligned}
\]
因为 \(x < p\) 所以存在逆元 \(\operatorname{inv}(x)\) 使得 \(p \cdot \operatorname{inv}(x)\cdot {p-1 \choose x-1} \equiv 0 \mod p\)
引理 \(2\):\((1 + x )^{p} \equiv 1+x^p \mod p\)
证明 :
\[\begin{aligned}
(1+x)^p &= \sum {p \choose i} x^i\\
&\equiv {p \choose 0}+{p \choose p} x^p \mod p \\
&\equiv 1+x^p \mod p
\end{aligned}\]
设 \(q_m = \left \lfloor \frac{m}{p} \right \rfloor\),\(r_m = m \mod p\)
则:
\[\large
\begin{aligned}
(1+x)^m &= (1+x)^{q_m \times p + r_m} \\
&=(1+x)^{q_m \times p} (1+x)^{r_m} \\
&\equiv (1+x^p)^{q_m} (1+x)^{r_m} \mod p\\
&\equiv \sum_{i=0}^{q_m}{q_m \choose i} x^{p\times i} \times \sum_{j=0}^{r_m} {r_m \choose j} x^j \mod p
\end{aligned}
\]
考虑枚举 \(k = p\times i+j\),原式化为
\[\large \sum_{k=0}^{m}{q_m\choose \left \lfloor \frac{k}{p} \right \rfloor}{r_m \choose k \bmod p}x^{k}
\]
即
\[\large (1+x)^{m} = \sum_{k=0}^{m} {m\choose k}x^k \equiv \sum_{k=0}^{m}{q_m\choose \left \lfloor \frac{k}{p} \right \rfloor}{r_m \choose k \bmod p}x^{k}
\]
考虑把\(n\) 代入 \(k\),比较系数可得:
\[{m \choose n} \equiv {m \bmod p \choose n \bmod p} \times { \left \lfloor m/p \right \rfloor \choose \left \lfloor n/p \right \rfloor } \mod p
\]
\(\text{Ex 中国剩余定理}\):
给定几个同余方程求一组解,模数可以不互质:
\[\large
\begin{cases}
\begin{aligned}
x &\equiv a_1 \mod p_1 \\
x &\equiv a_1 \mod p_2 \\
&\cdots \\
x &\equiv a_n \mod p_n
\end{aligned}
\end{cases}
\]
假设我们有两个方程
\[\begin{aligned}
x &\equiv a_1 \mod p_1\\
x &\equiv a_2 \mod p_2
\end{aligned}
\]
将他们转换成不定方程
\[\begin{aligned}
x&=p_1\times c+a_1\\
x&=p_2\times d+a_2
\end{aligned}
\]
有
\[p_1\times c-p_2 \times d = a_2 - a_1
\]
用 \(\text{Exgcd}\) 求出一组可行解 \((c,d)\);
则我们可以把原来两个方程合并:
\[x \equiv b \mod M
\]
其中 \(b=p_1 \times c+a_1\),\(M=\operatorname{lcm}(p1,p2)\)

浙公网安备 33010602011771号