【2024-ZR-C Day 1】數論基礎

心灵震荡發表於2024-07-17

1. Ex-GCD

1.1. 定義

\((a, b)=1\),則必然存在整數 \(x\) 使得 \(ax \equiv 1 (\bmod b)\).

即:\(ax+by=\gcd(a, b)\)\(x, y\) 必然有解。


1.2. 裴蜀定理

推論:若 \((a, b)=1\),則必然存在整數 \(x, y\) 滿足 \(ax + by = 1\).

裴蜀定理:對於 \(a, b \in \mathbb{Z}\)\(\exists x, y: ax + by = (a, b)\).

證明:記 \(d = (a, b), \space a' = \frac{a}{d}, \space b' = \frac{b}{d}\)
由 Ex-GCD 的推論知存在 \(x, y\) 滿足 \(a'x+b'y = 1\).
左右同乘 \(d\),得 \(ax + by = d\).


1.3. 求解

如何求出 \(x, y\)

定義 \(f(a, b)\):給定 \(a, b\),求出任意一組合法的 \(x, y\).

有基本事實:\(a \bmod b = a - \lfloor \frac{a}{b} \rfloor \times b\).
那麼考慮透過 \(f(b, a \bmod b)\) 推出 \(f(a, b)\).

\(t = \lfloor \frac{a}{b} \rfloor\),則 \(a \bmod b = a-tb\).
\(f(b, a \bmod b)\) 滿足方程 \(bx + (a \bmod b) y = d\),即 \(bx + (a - tb) y = d\).
\(f(a, b)\) 需要滿足的方程為 \(ax' + by' = d\),令 \(x' = y, \space y' = x - ty\) 即可。

void exgcd(int a, int b, int &x, int &y)
{
	if(!b) {x = 1, y = 0; return a;}
	exgcd(b, a % b, y, x);
	int xx = x, yy = y, t = a / b;
	x = yy, y = xx - t * yy;
	return;
}

可以證明,即使 \(a, b \le 10^9\),也絕對不會爆 int.


2. 擴充套件中國剩餘定理(Ex-CRT)

形如以下樣式的同餘方程組:

\[\begin{cases} x \equiv a_1 \pmod{m_1}\\ x \equiv a_2 \pmod{m_2}\\ \dots \\ x \equiv a_n \pmod{m_n} \end{cases} \]

考慮合併以下方程組:

\[\begin{cases} x \equiv a_1 \pmod{m_1}, \\ x \equiv a_2 \pmod{m_2}. \end{cases} \]

\(x = m_1 \cdot u + a_1 = m_2 \cdot v + a_2\).

\(m_1 \cdot u - m_2 \cdot v = a_2 - a_1 = \gcd(a, b)\).

可以合併出一個新的方程組 \(x \equiv a' \space (\bmod \operatorname{lcm}(m_1, m_2))\).

3. 乘法逆元

3.1. 定義

定義:若 \(ax \equiv 1 \pmod{P}\),則稱 \(x\)\(a\)\(P\) 的乘法逆元.


3.2. Wilson 定理

Wilson 定理:給定質數 \(P\)\((P-1)! \equiv -1 \pmod{P}\).

考慮將 \([1, P-1]\) 中的數及逆元兩兩配對,能配對當且僅當 \(a \ne a^{-1} \pmod{P}\).
即不能配對當且僅當 \(x^2 = 1 \pmod{P}\),只有一個解 \(x = P-1\).
\((P-1)! \equiv P - 1 \equiv -1 \pmod{P}\).


3.3. 費馬小定理

費馬小定理:對於質數 \(P\) 和非 \(0\) 整數 \(a\)\(a^{P-1} \equiv 1 \pmod{P}\).

證明:注意到 \(a, 2a, \ldots, (n-1)a\)\(\bmod P\) 意義下取遍 \([1, P - 1]\) 中所有數,
考慮 \(1 \cdot 2 \cdot 3 \cdots (P - 1) \equiv (1a) \cdot (2a) \cdot (3a) \cdots [(P-1) a]\)
\((P - 1)! \equiv a^{P - 1}(P - 1)!\).
由 Wilson 定理得,\(-1 \equiv -1 \cdot a^{P - 1}\).
\(a^{P-1} \equiv 1 \pmod{P}\).

由此,\(a^{P - 2} \equiv -1 \pmod{P}\),即為 \(a\)\(P\) 的乘法逆元。


3.4. 尤拉定理

尤拉定理:對於 \((a, m) = 1\),有 \(\varphi(m) \equiv 1 \pmod{m}\).
其中,\(\varphi(m)\) 表示 \([1, m]\) 裡和 \(m\) 互質的數的個數。


3.5. 預處理逆元

引入:給定質數 \(P\),多次詢問 \(\begin{pmatrix}n \\ m \end{pmatrix} \bmod P\).

\(i! = (i - 1)! \cdot i\),則 \(\frac{1}{(i - 1)!} = \frac{1}{i!} \cdot i\).

注意到 \(\frac{1}{(i - 1)!}\)\(\frac{1}{i!}\)\(\bmod P\) 意義下分別為 \((i - 1)!\)\(i!\) 的逆元,就可以線性預處理階乘的逆元了。

注意到 \(i = i! \cdot [(i-1)!]^{-1}\),則 \(i^{-1} = \frac{1}{i!} \cdot (i-1)!\).
即可以用階乘的逆元和階乘來 \(O(1)\) 計算逆元。

int ifac[N], inv[N], fac[N];

void init(int n)
{
	fac[0] = 1;
	for(int i=  1; i <= n; i++)
		fac[i] = 1ll * fac[i - 1] * i % P;
	ifac[n] = ksm(fac[n], P - 2);
	for(int i = n; i >= 1; i--)
	{
		ifac[i - 1] = 1ll * inv[i] * i % P;
		inv[i] = 1ll * fac[i - 1] * ifac[i] % P;
	}
	return;
}

3.6. Lucas 定理

Lucas 定理\(\begin{pmatrix}n \\ m \end{pmatrix} \equiv \begin{pmatrix}\lfloor \frac{n}{P} \rfloor \\ \lfloor \frac{m}{P} \rfloor \end{pmatrix} \cdot \begin{pmatrix}n \bmod P \\ m \bmod P \end{pmatrix}\pmod{P}\),其中 \(P\) 是質數.

使用 Lucas 求解的時間複雜度:\(O(\log_P n)\)

\(P = 2\) 時的描述:\(\begin{pmatrix}n \\ m \end{pmatrix} \equiv [n \operatorname{\&} m = m] \pmod{2}\).


4. BSGS (Baby Step Gaint Step)

離散對數問題:給定 \(a, b, P\),滿足 \((a, P) = 1\),求出一個 \(t\) 使得 \(a^t \equiv b \pmod{P}\)(也即求出模 \(P\) 意義下的 \(log_a b\))。

思考:給定 \(P, a\) 和兩個數的集合 \(S, T\),找到一組 \(x \in S, y \in T\) 使得 \(xy \equiv a \pmod{P}\).

上式可以化為 \(x \equiv \frac{a}{y}\). 考慮列舉 \(x\) 的所有取值,將它們放入 Hash 表中;再列舉 \(y\) 的所有取值,查詢 Hash 表中是否有此值。時間複雜度 \(O(\max\{|S|, |T|\} \log P)\).

回到原題,令 \(B = \lceil \sqrt{P} \rceil\),取 \(S = \{a^i\}, T = \{a^{B\cdot i}\}\) 即可,其中 $ \le i \le B$. 按照上面思考的方法即可解決問題,時間複雜度 \(O(\sqrt{P} \log P)\).


5. Ex-BSGS

在 BSGS 中,要求了 \((a, P) = 1\),若這兩數不互質,如何做?

考慮將 \(a, P\) 轉化為互質的。

\(d = \gcd(a, P)\),則只需找到方程 \(\frac{a}{d} \cdot a^{x-1} \equiv \frac{b}{d} \pmod{ \frac{P}{d}}\) 的解,即為原方程的解。

原方程即為 \(a^{x-1} \equiv \frac{b}{d} \cdot (\frac{a}{d})^{-1} \pmod{\frac{P}{d}}\).
\(b' = \frac{b}{d} \cdot (\frac{a}{d})^{-1}\),原方程化為 \(a^{x-1} \equiv b' \pmod{\frac{P}{d}}\).

不斷地進行 \((a, P) \to (a, \frac{P}{d})\),直到 \((a, P) = 1\),即變為普通的 BSGS 問題。


6. 階與原根

\(m\):最小的 \(t\) 使得 \(x^t \equiv 1 \pmod{m}\).
\(m\)原根:模 \(m\) 的階為 \(\varphi(m)\) 的數。

原根的本質:取對數將乘法轉化成指數上的加法。

一個數 \(m\) 存在原根當且僅當 \(m = 2, 4, p^{\alpha}, 2p^{\alpha}\),其中 \(p\) 為奇素數。、

如何快速判定一個數是否是原根?

引理:一個數模 \(m\) 的階如果存在,那它一定是 \(\varphi(m)\) 的約數。

\(m \ge 3, \space (g, m) = 1\),則 \(g\) 是模 \(m\) 的原根的充要條件是:對於 \(\varphi(m)\) 的每個素因數 \(p\),都有 \(g^{\frac{\varphi(m)}{p}} \ne 1 \pmod{m}\).

推論:若一個數 \(m\) 有原根,則它原根的個數為 \(\varphi(\varphi(m))\).


7. 例題

7.1. P2480 [SDOI2010] 古代豬文

簡要題意:求 \(g^{\sum_{d | n} \begin{pmatrix}n \\ d \end{pmatrix}} \mod P\),其中 \(P = 999911659\),是一個質數。

根據尤拉定理的推論,\(g^{\sum_{d | n} \begin{pmatrix}n \\ d \end{pmatrix}} = g^{\sum_{d | n} \begin{pmatrix}n \\ d \end{pmatrix} \mod (P - 1)}\).

可得 \(P - 1 = 999911658 = 2\times 3\times 4679\times 35617\).

分別計算出 \(\sum_{d | n} \begin{pmatrix}n \\ d \end{pmatrix}\) 對以上四個數取模的結果,記為 \(a_1, a_2, a_3, a_4\).

則有方程組

\[\begin{cases} x \equiv a_1 \pmod{2}, \\ x \equiv a_2 \pmod{3}, \\ x \equiv a_3 \pmod{4679}, \\ x \equiv a_4 \pmod{35617}. \end{cases} \]

使用 CRT 解決即可。

相關文章