Acwing-基礎算法課筆記之數學知識(擴展歐幾里得算法)
- 一、擴展歐幾里得算法
- 1、裴蜀定理
- 2、過程模擬
- 3、代碼模板
- 二、線性同余方程
- 1、定義
- 2、模擬過程
- 3、結論證明
一、擴展歐幾里得算法
1、裴蜀定理
對于任意正整數 a a a, b b b,那么一定存在非零整數 x x x, y y y,使得 a x + b y = e x g c d ( a , b ) ax+by=exgcd(a,b) ax+by=exgcd(a,b)
2、過程模擬
例如求 g c d ( a , b ) gcd(a,b) gcd(a,b)
? \bullet ?當 b = 0 b=0 b=0 時,則可以直接返回 a a a 的值,即最大公約數,推理如下:
根據公式 a x + b y = e x g c d ( a , b ) ax+by=exgcd(a,b) ax+by=exgcd(a,b),得:
a × x + 0 × y = a a\times x+0\times y=a a×x+0×y=a
? a × x = a \Lrarr a\times x=a ?a×x=a
? x = 1 \Lrarr x=1 ?x=1
? y = 0 \Rarr y=0 ?y=0
? \bullet ?當 b =? 0 b\not =0 b=0 時,求得擴展歐幾里得算法 e x g c d ( b , a % b , y , x ) exgcd(b,a\%b,y,x) exgcd(b,a%b,y,x),推理如下:
b y + ( a by+(a by+(a m o d mod mod b ) x = e x g c d ( a , b ) b)x=exgcd(a,b) b)x=exgcd(a,b)
? a \rArr a ?a m o d mod mod b = a ? ? a b ? b b=a-?\frac{a}{b}?b b=a??ba??b
? b y + ( a ? ? a b ? b ) x = e x g c d ( a , b ) \rArr by+(a-?\frac{a}{b}?b)x=exgcd(a,b) ?by+(a??ba??b)x=exgcd(a,b)
? a x + b ( y ? ? a b ? x ) = e x g c d ( a , b ) \rArr ax+b(y-?\frac{a}{b}?x)=exgcd(a,b) ?ax+b(y??ba??x)=exgcd(a,b)
3、代碼模板
// 求x, y,使得ax + by = gcd(a, b)
int 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;
}
Acwing-擴展歐幾里得算法
二、線性同余方程
1、定義
給定 n n n 組數據 a i a_i ai?, b i b_i bi?, m i m_i mi?,對于每組數求出一個 x i x_i xi?,使其滿足 a i × x i ≡ b i ( m o d a_i\times x_i\equiv b_i(mod ai?×xi?≡bi?(mod m i ) m_i) mi?)。
2、模擬過程
設 a = 2 a=2 a=2, b = 3 b=3 b=3, m = 6 m=6 m=6,此時以上并不滿足條件。
設 a = 4 a=4 a=4, b = 3 b=3 b=3, m = 5 m=5 m=5,要使 4 x % 5 = 3 4x\%5=3 4x%5=3,所以 x = ? 3 x=-3 x=?3或 x = 2 x=2 x=2
3、結論證明
a × x ≡ b ( m o d a\times x\equiv b(mod a×x≡b(mod m ) m) m)
? \Lrarr ? ? y ∈ Z \exist y\in Z ?y∈Z,使得 a x = m y + b ax=my+b ax=my+b
? a x ? m y = b \Lrarr ax-my=b ?ax?my=b
? y ′ = ? y \Lrarr y'=-y ?y′=?y
? a x + m y ′ = g c d ( a , m ) \Lrarr ax+my'=gcd(a,m) ?ax+my′=gcd(a,m)(條件: g c d ( a , m ) ∣ b gcd(a,m)|b gcd(a,m)∣b)