欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

裴枢定理 扩展欧几里得算法 中国余数定理

最编程 2024-07-18 21:52:58
...

目录

  • 裴蜀定理
    • 裴蜀定理的定义
    • 裴蜀定理求解二元不定方程
  • 扩展欧几里得算法
    • 算法的简介
    • 算法的应用场景
    • 算法实现过程的证明
    • 解不定线性方程组
      • 代码实现
    • 线性同余方程
      • 代码实现
  • 中国剩余定理
    • 中国剩余定理的定义
    • 表达整数的奇怪方式(高难)
      • 实现思路
      • 代码实现


裴蜀定理

裴蜀定理的定义

a , b a,b a,b 是正整数,且 g c d ( a , b ) = d gcd(a,b)=d gcd(a,b)=d,那么:

  • 对于任意的整数 x , y , a x + b y x,y,ax+by x,yax+by 都一定是 d d d 的倍数。
  • g c d ( a , b ) gcd(a,b) gcd(a,b) a x + b y ax + by ax+by 能凑出来的最小正整数。
  • 一定存在整数 x , y x,y x,y (不唯一),使 a x + b y = d ax+by=d ax+by=d 成立。

什么是贝祖数?

例如: 2 x + y = 3 2x+y=3 2x+y=3,那么符合这个等式的 { x = 1 y = 1 \left\{\begin{array}{l}x = 1 \\ y = 1\end{array}\right. {x=1y=1 就是一组贝祖数。


裴蜀定理求解二元不定方程

设二元一次不定方程

a x + b y = c ax+by=c ax+by=c

(其中 a , b , c a, b, c a,b,c 是整数,且 a , b a, b a,b 都不是 0 0 0)

假定有一组整数解 { x = x 0 y = y 0 \left\{\begin{array}{l}x = x_0 \\ y = y_0\end{array}\right. {x=x0y=y0,则原式的一切整数的通解可以表示成:

{ x = x 0 − b ( a , b ) t y = y 0 + a ( a , b ) t ( t ∈ Z ) \begin{cases} x=x_0- \frac b{(a,b)}t \\y=y_0+ \frac a{(a,b)}t\qquad (t\in\mathbb{Z})\end{cases} {x=x0(a,b)bty=y0+(a,b)at(tZ)

其中 ( a , b ) (a,b) (a,b) 代表 a a a b b b 的最大公约数。

证明过程:

x 0 , y 0 x_0,y_0 x0,y0 是方程(1)的一个整数解组,即:
a x 0 + b y 0 = c ( 1 ) ax_0+by_0=c\qquad (1) ax0+by0=c(1)

x 0 , y 0 x_0,y_0 x0,y0 代入方程(1),可得:
a ( x − x 0 ) + b ( y − y 0 ) = 0 a(x-x_0) + b(y-y_0) = 0 a(xx0)+b(yy0)=0

因为 a , b a,b a,b 都是非0整数,所以上式等价于:
a ( a , b ) ( x − x 0 ) + b ( a , b ) ( y − y 0 ) = 0 \frac{a}{(a,b)}(x-x_0)+\frac{b}{(a,b)}(y-y_0)=0 (a,b)a(xx0)+(a,b)b(yy0)=0

上式为:
− b ( a , b ) ( y − y 0 ) = a ( a , b ) ( x − x 0 ) -\frac{b}{(a,b)}(y-y_0) = \frac{a}{(a,b)}(x-x_0) (a,b)b(yy0)=(a,b)a(xx0)

因为:
( b ( a , b ) , a ( a , b ) ) = 1 (\frac{b}{(a,b)},\frac{a}{(a,b)})=1 ((a,b)b,(a,b)a)=1

所以:
a ( a , b ) ∣ ( y − y 0 ) \frac{a}{(a,b)}|(y-y_0) (a,b)a(yy0)
y = y 0 + a ( a , b ) t ( t ∈ Z ) y=y_0+\frac{a}{(a,b)}t\qquad (t\in\mathbb{Z}) y=y0+(a,b)at(tZ)

x x x 同理,让 t t t 取所有整数,可以得到方程(1)的全部整数解:
{ x = x 0 − b ( a , b ) t y = y 0 + a ( a , b ) t ( t ∈ Z ) \begin{cases} x=x_0-\frac{b}{(a,b)}t \\ y=y_0+\frac{a}{(a,b)}t \qquad (t\in\mathbb{Z})\end{cases} {x=x0(a,b)