• 若干类型的同余方程的解法


    若干类型的同余方程的解法

    以下字母未加说明都表示使意义成立的等式

    所有的证明、推导都写在引用里了,不愿意看可以跳过。

    线性同余方程

    解形如

    a x ≡ c ( m o d b ) ax\equiv c\pmod b axc(modb)

    的同余方程.

    容易根据同余的定义转化为解形如

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

    的二元一次不定方程.

    结论 1 该不定方程有整数解的充要条件为 gcd ⁡ ( a , b ) ∣ c \gcd(a,b)\mid c gcd(a,b)c.(裴蜀定理)

    证明:
    必要性
    a x + b y = c ax+by=c ax+by=c 有整数解 ( x 0 , y 0 ) (x_0,y_0) (x0,y0),则由于 gcd ⁡ ( a , b ) ∣ a , gcd ⁡ ( a , b ) ∣ b \gcd(a,b)\mid a,\gcd(a,b)\mid b gcd(a,b)a,gcd(a,b)b,有 gcd ⁡ ( a , b ) ∣ ( a x 0 + b y 0 ) \gcd(a,b)\mid (ax_0+by_0) gcd(a,b)(ax0+by0),即 gcd ⁡ ( a , b ) ∣ c \gcd(a,b)\mid c gcd(a,b)c.
    充分性
    若方程 a x + b y = gcd ⁡ ( a , b ) ax+by=\gcd(a,b) ax+by=gcd(a,b) 有整数解 ( x 0 , y 0 ) (x_0,y_0) (x0,y0),则方程 a x + b y = c ax+by=c ax+by=c 对应有整数解 ( x 0 ⋅ c gcd ⁡ ( a , b ) , y 0 ⋅ c gcd ⁡ ( a , b ) ) \left(x_0\cdot \dfrac{c}{\gcd(a,b)},y_0\cdot \dfrac{c}{\gcd(a,b)}\right) (x0gcd(a,b)c,y0gcd(a,b)c)
    故下证 a x + b y = gcd ⁡ ( a , b ) ax+by=\gcd(a,b) ax+by=gcd(a,b) 必有整数解.
    首先由于 gcd ⁡ ( a , b ) ∣ a , g c d ( a , b ) ∣ b \gcd(a,b)\mid a,gcd(a,b)\mid b gcd(a,b)a,gcd(a,b)b,则对于 a , b a,b a,b 的任意线性组合,有 gcd ⁡ ( a , b ) ∣ ( a x + b y ) \gcd(a,b)\mid (ax+by) gcd(a,b)(ax+by). 设 s s s a x + b y ax+by ax+by 的最小正值,且满足 s = a x 0 + b y 0 s=ax_0+by_0 s=ax0+by0,则有 gcd ⁡ ( a , b ) ∣ s \gcd(a,b)|s gcd(a,b)s.
    但对于 a   m o d   s = a − ⌊ a s ⌋ s = a − ⌊ a s ⌋ ( a x 0 + b y 0 ) = a ( 1 − ⌊ a s ⌋ x 0 ) + b ( − ⌊ a s ⌋ y 0 ) a\bmod s=a-\left\lfloor\dfrac{a}{s}\right\rfloor s=a-\left\lfloor\dfrac{a}{s}\right\rfloor (ax_0+by_0)=a(1-\left\lfloor \dfrac{a}{s}\right\rfloor x_0)+b(-\left\lfloor \dfrac{a}{s}\right\rfloor y_0) amods=asas=asa(ax0+by0)=a(1sax0)+b(say0) 也为 a , b a,b a,b 的线性组合,则 a   m o d   s ≤ 0 a\bmod s\le 0 amods0 a   m o d   s ≥ s a\bmod s\ge s amodss. 故 a m o d    s = 0 a\mod s=0 amods=0,即 s ∣ a s\mid a sa,同理 s ∣ b s\mid b sb,从而 s ∣ gcd ⁡ ( a , b ) s\mid \gcd(a,b) sgcd(a,b). 又 gcd ⁡ ( a , b ) ∣ s \gcd(a,b)\mid s gcd(a,b)s,所以 s = gcd ⁡ ( a , b ) s=\gcd(a,b) s=gcd(a,b),故 a x + b y = gcd ⁡ ( a , b ) ax+by=\gcd(a,b) ax+by=gcd(a,b) 有解 ( x 0 , y 0 ) (x_0,y_0) (x0,y0).

    结论 2 a x + b y = c , ( a ⊥ b ) ax+by=c,(a\perp b) ax+by=c,(ab) 的一组特解为 ( x 0 , y 0 ) (x_0,y_0) (x0,y0),则其所有的解为

    { x = x 0 + b t y = y 0 − a t   ( t ∈ Z )

    {x=x0+bty=y0at" role="presentation" style="position: relative;">{x=x0+bty=y0at
    \ (t\in \mathrm Z) {x=x0+bty=y0at (tZ)

    证明:先证该组 ( x , y ) (x,y) (x,y) 为原方程的解:
    a x + b y = a ( x 0 + b t ) + b ( y 0 − a t ) = a x 0 + b y 0 = 1 ax+by=a(x_0+bt)+b(y_0-at)=ax_0+by_0=1 ax+by=a(x0+bt)+b(y0at)=ax0+by0=1
    再证这是所有的解. 对于 a x + b y = 1 ax+by=1 ax+by=1 的任意一组解 ( x ′ , y ′ ) (x',y') (x,y),有 a x ′ + b y ′ = 1 ax'+by'=1 ax+by=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 ( y ′ − y 0 ) a\mid b(y'-y_0) ab(yy0)
    a ⊥ b a\perp b ab,则 a ∣ ( y ′ − y 0 ) a\mid (y'-y_0) a(yy0),则 y ′ − y 0 = k a y'-y_0=ka yy0=ka. 容易化为题给形式.

    推论 a x + b y = c ax+by=c ax+by=c 的一组特解为 ( x 0 , y 0 ) (x_0,y_0) (x0,y0),则其所有的解为

    { x = x 0 + b gcd ⁡ ( a , b ) ⋅ t y = y 0 − a gcd ⁡ ( a , b ) ⋅ t   ( t ∈ Z )

    {x=x0+bgcd(a,b)ty=y0agcd(a,b)t" role="presentation" style="position: relative;">{x=x0+bgcd(a,b)ty=y0agcd(a,b)t
    \ (t \in \mathrm Z) x=x0+gcd(a,b)bty=y0gcd(a,b)at (tZ)

    解方程的过程

    Step 1 对于方程 a x + b y = c ax+by=c ax+by=c,其中 gcd ⁡ ( a , b ) ∣ c \gcd(a,b)\mid c gcd(a,b)c,我们先找出 a x + b y = gcd ⁡ ( a , b ) ax+by=\gcd(a,b) ax+by=gcd(a,b) 的一组特解.

    由于 a x + b y = gcd ⁡ ( a , b ) = gcd ⁡ ( b , a   m o d   b ) ax+by=\gcd(a,b)=\gcd(b,a\bmod b) ax+by=gcd(a,b)=gcd(b,amodb),若我们先解出了方程 b x ′ + ( a   m o d   b ) y ′ = gcd ⁡ ( b , a m o d    b ) bx'+(a\bmod b)y'=\gcd(b,a\mod b) bx+(amodb)y=gcd(b,amodb) 的一组特解 ( x 0 ′ , y 0 ′ ) (x'_0,y'_0) (x0,y0)(这是一个递归过程),我们想办法从 ( x 0 ′ , y 0 ′ ) (x'_0,y'_0) (x0,y0) 推出 ( x , y ) (x,y) (x,y) 的一组解.
    gcd ⁡ ( a , b ) = gcd ⁡ ( b , a   m o d   b ) \gcd(a,b)=\gcd(b,a\bmod b) gcd(a,b)=gcd(b,amodb),则 a x 0 + b y 0 = b x 0 ′ + ( a   m o d   b ) y ′ ax_0+by_0=bx'_0+(a\bmod b)y' ax0+by0=bx0+(amodb)y,即 a x 0 + b y 0 = b x 0 ′ + ( a − ⌊ a / b ⌋ b ) y 0 ′ = a y 0 ′ + b ( x 0 ′ − ⌊ a / b ⌋ y 0 ′ ) ax_0+by_0=bx'_0+(a-\lfloor a/b\rfloor b)y'_0=ay'_0+b(x'_0-\lfloor a/b\rfloor y'_0) ax0+by0=bx0+(aa/bb)y0=ay0+b(x0a/by0).
    所以可以令 x 0 = y 0 ′ , y 0 = x 0 ′ − ⌊ a / b ⌋ y 0 ′ x_0=y'_0,y_0=x'_0-\lfloor a/b\rfloor y'_0 x0=y0,y0=x0a/by0,得到方程 a x + b y = gcd ⁡ ( a , b ) ax+by=\gcd(a,b) ax+by=gcd(a,b) 的一组解。

    由上述过程我们容易得到算法:

    def solve(a,b) : # 求解 ax+by=\gcd(a,b)
       if b != 0 :   # 递归求解 bx+(a % b)y=\gcd(b,a % b)
          x, y = solve(b, a % b) # 得到 x'_0, y'_0
          return y, x - (a // b) * y # 得到 x_0,y_0
       else :
          return 1, 0
          # 边界情况,此时方程为 ax=a,有解 (1,0)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    Step 2 我们得到 a x + b y = gcd ⁡ ( a , b ) ax+by=\gcd(a,b) ax+by=gcd(a,b) 的特解 ( x 0 , y 0 ) (x_0,y_0) (x0,y0),则 a x + b y = c ax+by=c ax+by=c 的解为 ( x 0 ⋅ c gcd ⁡ ( a , b ) , y 0 ⋅ c gcd ⁡ ( a , b ) ) \left(x_0\cdot \dfrac{c}{\gcd(a,b)},y_0\cdot \dfrac{c}{\gcd(a,b)}\right) (x0gcd(a,b)c,y0gcd(a,b)c)

    Step 3 我们得到 a x + b y = c ax+by=c ax+by=c 的特解为 ( x 0 , y 0 ) (x_0,y_0) (x0,y0)(注意这里的定义和 Step 2 不一样),则其通解为

    { x = x 0 + b gcd ⁡ ( a , b ) ⋅ t y = y 0 − a gcd ⁡ ( a , b ) ⋅ t   ( t ∈ Z )

    {x=x0+bgcd(a,b)ty=y0agcd(a,b)t" role="presentation" style="position: relative;">{x=x0+bgcd(a,b)ty=y0agcd(a,b)t
    \ (t\in \mathrm Z) x=x0+gcd(a,b)bty=y0gcd(a,b)at (tZ)

    一些细节:

    1. 解方程之前需要用裴蜀定理判断是否有解。
    2. 使用 solve 时保证 a, b 均非负。
  • 相关阅读:
    ESP32_esp-idf_lvgl_V8环境搭建移植
    BlockingQueue
    java毕业设计——基于java+JSP+Oracle的记账管理系统设计与实现——记账管理系统
    EM@常用三角函数图象性质(中学部分)
    R语言生物群落数据统计分析
    泛微OA表说明
    Surge:分子生成最前沿
    线程的“结束”
    遗传算法在机器人路径规划中的应用研究(Matlab代码实现)
    【电脑使用】iPad or Android快速访问Windows文件
  • 原文地址:https://blog.csdn.net/qq_41996523/article/details/126114981