拓展欧几里得算法
欧几里得算法直接使用g++中的<algorithm>库中__gcd()函数即可。
( a , b ) = ( b , a   m o d   b ) (a,b)=(b,a \bmod b) (a,b)=(b,amodb).
拓展欧几里得算法用于求出不定方程 a x + b y = ( a , b ) ax+by=(a,b) ax+by=(a,b)的一个特解 x 0 , y 0 x_0,y_0 x0,y0,
顺带求出 ( a , b ) (a,b) (a,b),[通解 x = x 0 + b ( a , b ) t ,   y = y 0 − a ( a , b ) t    ( t ∈ Z ) x=x_0+\frac{b}{(a,b)}t,\,y=y_0-\frac{a}{(a,b)}t \; (t \in Z) x=x0+(a,b)bt,y=y0−(a,b)at(t∈Z)]{}.
解不定方程
不定方程 a x + b y = c ax+by=c ax+by=c有解等价于 ( a , b ) ∣ c (a,b) \mid c (a,b)∣c.据此判断是否有解,若有解,假设有一组特解 x 0 ′ , y 0 ′ x_0^{'},y_0^{'} x0′,y0′,则它们的 c ( a , b ) \frac{c}{(a,b)} (a,b)c倍显然是原不定方程的一组特解。 x 0 = c ( a , b ) x 0 ′ , y 0 = c ( a , b ) y 0 ′ x_0=\frac{c}{(a,b)}x_0^{'},y_0=\frac{c}{(a,b)}y_0^{'} x0=(a,b)cx0′,y0=(a,b)cy0′,而通解依旧是 x = x 0 + b ( a , b ) t ,   y = y 0 − a ( a , b ) t    ( t ∈ Z ) x=x_0+\frac{b}{(a,b)}t,\,y=y_0-\frac{a}{(a,b)}t \; (t \in Z) x=x0+(a,b)bt,y=y0−(a,b)at(t∈Z).
求解模线性方程(线性同余方程)
a x ≡ c ( m o d m ) ⟺ a x + m y = c ax \equiv c\pmod{m} \Longleftrightarrow ax+my=c ax≡c(modm)⟺ax+my=c.
求乘法逆元
a b ≡ 1 ( m o d m ) ab \equiv 1 \pmod{m} ab≡1(modm),
则a关于模m的乘法逆元是b,b关于模m的乘法逆元是a。或者说 Z m Z_m Zm群中a和b互为乘法逆元。
用乘法逆元有 A b ≡ A × b − 1 ( m o d c ) \frac{A}{b} \equiv A \times b^{-1} \pmod{c} bA≡A×b−1(modc).当左边的式子A是很大的数,而b是小规模数,且除出来的数一定是整数的时候,可以用右式边算边模。
求解
a x ≡ 1 ( m o d m ) ⟺ a x + m y = 1 ax \equiv 1 \pmod{m} \Longleftrightarrow ax+my= 1 ax≡1(modm)⟺ax+my=1.解出的x即为解,只是注意需要用通解公式将 x x x调整到 Z m Z_m Zm范围内。
线性同余方程组
方程组 a i x ≡ c i ( m o d m i ) ( i = 1 , 2 , 3 , … , n ) a_ix \equiv c_i \pmod{m_i} \quad (i=1, 2, 3, \ldots, n)