數學學習筆記
Miller_Rabin素性測試
-
常規判定素數方法: 從 \(1至\sqrt{n}\) 中列舉 \(p\) ,判斷 \(p | n\)
-
Miller_Rabin
對於一個 \(n\) ,假如它是質數
設 \(n - 1 = d \times 2^r\) , 其中 \(d\) 是一個奇數
對於每一個 \(1 \leq a < n\) 對於下面兩種條件,至少有一個是成立的- \(a^d \equiv 1 \pmod n\)
- 存在 \(0 \leq i < r\) , 滿足 \(a^{d\times2^i}\equiv n-1\pmod n\)
於是當前對於 \(1 \leq a<n\)
- 滿足至少一個條件 --> \(n\) 可能是質數
- 兩個條件都不滿足 --> \(n\) 一定不是質數
於是可以尋找對個 \(a\) 對 \(n\) 進行檢測, 如果全部通過檢測有極大概率 \(n\) 為質數
bool miller_rabin(int n, int a) { int d = n - 1, r = 0; while (!(d & 1)) d >>= 1, r++; int x = ksm(a, d, n); if (x == 1) return true; for (int i = 0; i < r; i++) { if (x == n - 1) return true; x = 1ll * x * x % n; } return false; } bool prime(int n) { if (n < 2) return false; int prime_list[10] = {2, 3, 5, 11, 17, 19, 23, 37, 41, 43}; for (int a = 0; a < 10; a++) { if (n == prime_list[a]) return true; if (!miller_rabin(n, prime_list[a])) return false; } return true; }
逆元
如果 \(gcd(a,m) = 1\) 且存在唯一的 \(b\) 存在 \(a \times b \equiv 1 \pmod m\) 且 \(1\leq b<m\), \(b\) 為 \(a\) 在模 \(m\) 意義下的逆元
費馬小定理 \(a ^ {p - 1}\equiv 1\pmod p (gcd(a, p) = 1)\)
尤拉定理 \(a ^ {\phi(m)} \equiv 1 \pmod m (gcd(a, m) = 1)\)
擴充套件尤拉定理
- \(c < \phi(m)\) 則 \(a^c\equiv a^c \pmod m\)
- \(c >= \phi(m)\)
線性求逆元
\(a ^ {p - 1}\equiv 1\pmod p (gcd(a, p) = 1)\)
\(m \bmod a = m - a \times \lfloor \frac{m}{a} \rfloor\)
設 \(b = m \bmod a\)
\(a^{-1}\equiv a^{-1} \times b\times b^{-1} = a^{-1}\times (m - a \times \lfloor \frac{m}{a} \rfloor)\times b^{-1} \pmod m\)
得 \(a^{-1}\equiv -\lfloor \frac{m}{a} \rfloor \times b^{-1} \pmod m\)