Bài 66: Căn Nguyên Thủy & Dấu Hiệu Bình Phương¶
Tác giả: FPTOJ Team
Nội dung tham khảo từ: CP-Algorithms, VNOI Wiki
1. Căn Nguyên Thủy (Primitive Root)¶
1.1 Định nghĩa¶
Cho \(n\) nguyên tố. Số \(g\) là căn nguyên thủy modulo \(n\) nếu \(\text{ord}(g) = \phi(n) = n - 1\).
Nghĩa là: \(g^0, g^1, g^2, \ldots, g^{n-2}\) cho tất cả giá trị từ \(1\) đến \(n-1\) (modulo \(n\)).
1.2 Ví dụ¶
\(n = 7\), \(g = 3\): - \(3^0 = 1\) - \(3^1 = 3\) - \(3^2 = 9 \equiv 2\) - \(3^3 = 27 \equiv 6\) - \(3^4 = 81 \equiv 4\) - \(3^5 = 243 \equiv 5\)
→ \(\{1, 2, 3, 4, 5, 6\}\) = tất cả số từ 1 đến 6. Vậy 3 là căn nguyên thủy modulo 7.
1.3 Điều kiện tồn tại¶
Căn nguyên thủy modulo \(n\) tồn tại khi và chỉ khi \(n\) thuộc một trong các dạng: - \(n = 1, 2, 4\) - \(n = p^k\) với \(p\) nguyên tố lẻ - \(n = 2p^k\) với \(p\) nguyên tố lẻ
Trong thi đấu, thường \(n\) là số nguyên tố → luôn có căn nguyên thủy.
1.4 Tính chất¶
- Số căn nguyên thủy modulo \(p\) là \(\phi(p-1)\)
- Nếu \(g\) là căn nguyên thủy, thì \(g^k\) cũng là căn nguyên thủy khi \(\gcd(k, p-1) = 1\)
2. Tìm căn nguyên thủy¶
2.1 Thuật toán¶
Với \(p\) nguyên tố: 1. Phân tích \(p - 1\) thành thừa số nguyên tố: \(p - 1 = q_1^{e_1} \cdot q_2^{e_2} \cdots q_k^{e_k}\) 2. Duyệt \(g = 2, 3, 4, \ldots\) 3. Kiểm tra: với mọi \(q_i\), \(g^{(p-1)/q_i} \not\equiv 1 \pmod{p}\) 4. Nếu thỏa mãn → \(g\) là căn nguyên thủy
2.2 Cài đặt¶
Độ phức tạp: \(O(g \cdot k \cdot \log p)\) với \(g\) là căn nguyên thủy đầu tiên (thường rất nhỏ, ~O(log²p)).
3. Dấu Hiệu Bình Phương (Quadratic Residue)¶
3.1 Định nghĩa¶
Số \(a\) là dấu hiệu bình phương modulo \(p\) (ký hiệu \(a\) là QR) nếu tồn tại \(x\) sao cho:
Nếu không tồn tại \(x\), \(a\) là phi-dấu hiệu bình phương (NQR).
3.2 Ví dụ¶
Modulo 7: - \(1^2 = 1\) → 1 là QR - \(2^2 = 4\) → 4 là QR - \(3^2 = 9 \equiv 2\) → 2 là QR - \(4^2 = 16 \equiv 2\) → trùng - \(5^2 = 25 \equiv 4\) → trùng - \(6^2 = 36 \equiv 1\) → trùng
QR modulo 7: \(\{1, 2, 4\}\) → đúng \((p-1)/2 = 3\) số.
4. Ký hiệu Legendre¶
4.1 Định nghĩa¶
4.2 Định lý Euler¶
4.3 Tính chất¶
- \(\left(\frac{ab}{p}\right) = \left(\frac{a}{p}\right) \left(\frac{b}{p}\right)\)
- \(\left(\frac{a^2}{p}\right) = 1\) nếu \(p \nmid a\)
5. Tonelli-Shanks: Căn bậc hai modulo¶
5.1 Bài toán¶
Cho \(a\) là QR modulo \(p\) (nguyên tố lẻ). Tìm \(x\) sao cho \(x^2 \equiv a \pmod{p}\).
5.2 Trường hợp đặc biệt¶
Nếu \(p \equiv 3 \pmod{4}\):
Vì \(x^2 = a^{(p+1)/2} = a \cdot a^{(p-1)/2} = a \cdot 1 = a\) (do \(a\) là QR).
5.3 Thuật toán Tonelli-Shanks tổng quát¶
6. Ứng dụng¶
6.1 NTT (Number Theoretic Transform)¶
Căn nguyên thủy là thành phần thiết yếu của NTT (xem Bài 67).
6.2 Giải phương trình bậc hai¶
\(x^2 \equiv a \pmod{p}\) → dùng Tonelli-Shanks.
6.3 Kiểm tra QR nhanh¶
Dùng Euler's criterion: \(a^{(p-1)/2} \equiv 1 \pmod{p}\) → QR.
7. Bài tập luyện tập¶
Bài 1: Tìm căn nguyên thủy¶
Đề bài: Cho số nguyên tố \(p\). Tìm căn nguyên thủy nhỏ nhất modulo \(p\).
Input: Số nguyên tố \(p\) \((2 \leq p \leq 10^9)\)
Output: Căn nguyên thủy nhỏ nhất.
Ví dụ:
| Input | Output |
|---|---|
7 |
3 |
13 |
2 |
Giải thích (test 1): \(3^1=3, 3^2=2, 3^3=6, 3^4=4, 3^5=5, 3^6=1 \pmod{7}\). Bậc = 6 = \(p-1\).
Lời giải
Phân tích \(p-1\), duyệt \(g\) từ 2, kiểm tra \(g^{(p-1)/q} \not\equiv 1\) với mọi ước nguyên tố \(q\) của \(p-1\).
Bài 2: Kiểm tra dấu hiệu bình phương¶
Đề bài: Cho \(q\) truy vấn. Mỗi truy vấn cho \(a\) và số nguyên tố lẻ \(p\). Kiểm tra \(a\) có phải dấu hiệu bình phương modulo \(p\) không.
Input: - Dòng 1: số nguyên \(q\) \((1 \leq q \leq 10^5)\) - \(q\) dòng: 2 số nguyên \(a, p\) \((0 \leq a < p\), \(p\) nguyên tố lẻ\(, p \leq 10^9)\)
Output: Với mỗi truy vấn, in YES nếu \(a\) là QR, NO nếu không.
Ví dụ:
| Input | Output |
|---|---|
32 73 74 7 |
YESNOYES |
Lời giải
Dùng Euler's criterion: \(a^{(p-1)/2} \equiv 1 \pmod{p}\) → QR.
Bài 3: Căn bậc hai modulo¶
Đề bài: Cho \(a\) và số nguyên tố lẻ \(p\). Tìm \(x\) sao cho \(x^2 \equiv a \pmod{p}\). Nếu có nhiều nghiệm, in nghiệm nhỏ nhất.
Input: 2 số nguyên \(a, p\) \((0 \leq a < p\), \(p\) nguyên tố lẻ\(, p \leq 10^9)\)
Output: Nghiệm \(x\) hoặc -1 nếu không tồn tại.
Ví dụ:
| Input | Output |
|---|---|
2 7 |
3 |
3 7 |
-1 |
Giải thích (test 1): \(3^2 = 9 \equiv 2 \pmod{7}\).
Lời giải
Nếu \(p \equiv 3 \pmod{4}\): \(x = a^{(p+1)/4} \pmod{p}\). Nếu không → Tonelli-Shanks.