取模专题

快速取模:

\(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)\)

posted @ 2024-02-29 09:43  Saka_Noa  阅读(25)  评论(0)    收藏  举报