扩展欧几里得算法
扩展欧几里得算法 (Extended Euclidean algorithm) 是欧几里得算法(辗转相除法)的扩展。
给定两个 非零整数 a 与 b ,必存在有 整数 x 与 y ,使得 a x + b y = g c d ( a , b ) ax + by = gcd(a, b) a x + b y = g c d ( a , b )
1 2 3 4 5 6 7 8 9 10 11 12 int exGcd (int a, int b, int & x, int & y) { if (b == 0 ) { x = 1 ; y = 0 ; return a; } int g = exGcd(b, a%b, x, y); int temp = x; x = y; y = temp - a / b * y; return g; }
x 与 y 的所有解 :
x ′ = x + b g c d ∗ K y ′ = y − a g c d ∗ K K 为 任 意 整 数 x' = x + \frac{b}{gcd}*K\\
y' = y - \frac{a}{gcd}*K\\
K 为任意整数
x ′ = x + g c d b ∗ K y ′ = y − g c d a ∗ K K 为 任 意 整 数
x 的最小非负整数解 :( x % b g c d + b g c d ) % b g c d (x \% \frac{b}{gcd} + \frac{b}{gcd}) \% \frac{b}{gcd} ( x % g c d b + g c d b ) % g c d b (使其必然为正数)
ax + by = c 求解
可以根据上面求解的扩展欧几里来进一步的求解 a x + b y = c ax + by = c a x + b y = c (c 为任意整数)
假设 a x + b y = g c d ( a , b ) ax + by = gcd(a, b) a x + b y = g c d ( a , b ) 有一组解 ( x 0 , y 0 ) (x_0, y_0) ( x 0 , y 0 )
a x + b y = g c d ( a , b ) 两 边 同 乘 c g c d a c x 0 g c d + b c y 0 g c d = c ax + by = gcd(a, b)\\
两边同乘\frac{c}{gcd}\\
a\frac{cx_0}{gcd} + b\frac{cy_0}{gcd}=c
a x + b y = g c d ( a , b ) 两 边 同 乘 g c d c a g c d c x 0 + b g c d c y 0 = c
a x + b y = c ax + by = c a x + b y = c 存在解的 充要条件 是 c % g c d = = 0 c \% gcd == 0 c % g c d = = 0 ,且有一组解为 ( c x 0 g c d , c y 0 g c d ) (\frac{cx_0}{gcd}, \frac{cy_0}{gcd}) ( g c d c x 0 , g c d c y 0 )
a x + b y = c ax + by = c a x + b y = c 的全部解:
x ′ = c x 0 g c d + b g c d ∗ K y ′ = c y 0 g c d − a g c d ∗ K K 为 任 意 整 数 x' = \frac{cx_0}{gcd} + \frac{b}{gcd}*K\\
y' = \frac{cy_0}{gcd} - \frac{a}{gcd}*K\\
K 为任意整数
x ′ = g c d c x 0 + g c d b ∗ K y ′ = g c d c y 0 − g c d a ∗ K K 为 任 意 整 数
同余式 ax ≡ c (mod m) 的求解
同余式 :设m是给定的一个正整数,a、b是整数,若满足 m m% (a-b) == 0 m ,则称 a 与 b 对模 m 同余,记为 a ≡ b ( m o d m ) a \equiv b (mod \ m) a ≡ b ( m o d m )
每一整数都各自与 [ 0 , m ) [0,\ m) [ 0 , m ) 的唯一整数同余
可以将 a x ≡ c ( m o d m ) ax \equiv c (mod\ m) a x ≡ c ( m o d m ) 化成 a x + b y = c ax + by = c a x + b y = c
根据同余式定义:( a x − c ) % m = 0 (ax - c) \% m = 0 ( a x − c ) % m = 0 ,因此存在 y 使得 a x − c = m y ax - c = my a x − c = m y 成立,移项后令 y = -y 即可得到 a x + b y = c ax + by = c a x + b y = c
因此可以得到以下结论:
设 a , c , m 是 整 数 , 其 中 m ≥ 1 , 则 1. 若 c e q u a t i o n % g c d ( a , m ) ≠ 0 , 则 同 余 式 a x ≡ c ( m o d m ) 无 解 2. 若 c % g c d ( a , m ) = 0 , 则 同 余 式 a x ≡ c ( m o d m ) 恰 好 有 g c d ( a , m ) 个 模 m 意 义 下 不 同 的 解 , 且 解 的 形 式 为 : x ′ = x + m g c d ( a , m ) ∗ K 其 中 K = 0 , 1 , … … , g c d ( a , m ) − 1 , x 是 a x + m y = c 的 一 个 解 设 a,c,m 是整数,其中 m \ge 1,则\\
1.\ 若 cequation \% gcd(a, m) \neq 0,则同余式 ax \equiv c (mod\ m) 无解\\
2.\ 若 c \% gcd(a, m) = 0,则同余式 ax \equiv c (mod\ m) 恰好有 gcd(a, m) 个模m意义下不同的解,且解的形式为:\\
x'=x+\frac{m}{gcd(a, m)} * K\\
其中K = 0,1,……,gcd(a, m) - 1,x 是 ax + my = c 的一个解
设 a , c , m 是 整 数 , 其 中 m ≥ 1 , 则 1 . 若 c e q u a t i o n % g c d ( a , m ) = 0 , 则 同 余 式 a x ≡ c ( m o d m ) 无 解 2 . 若 c % g c d ( a , m ) = 0 , 则 同 余 式 a x ≡ c ( m o d m ) 恰 好 有 g c d ( a , m ) 个 模 m 意 义 下 不 同 的 解 , 且 解 的 形 式 为 : x ′ = x + g c d ( a , m ) m ∗ K 其 中 K = 0 , 1 , … … , g c d ( a , m ) − 1 , x 是 a x + m y = c 的 一 个 解