2元1次不定方程式Ax+By=1の特殊解

 投稿者:山中和義  投稿日:2015年 6月28日(日)10時16分7秒
  ユークリッドの互除法による

例 37x+32y=1

答え 互除法

   1 | 37  32 | 6            1 |  a         b     | 6
     | 32  30 |                |  b        6(a-b) |
  ----------------    →    --------------------------
   2 |  5   2 |              2 |  a-b      -6a+7b |
     |  4     |                | 2(-6a+7b)        |
  ----------------          --------------------------
     |  1     |                | 13a-15b          |

        ↓

     |  1   0 | -2
     |     -2 |
  -----------------
  -6 |  1  -2 | -1
     | 12 -13 |
  -----------------
     | 13 -15 |
(終り)

答え 互除法の商+連立方程式の行基本変形の考え方
漸化式 [n行の係数]=[(n-2)行の係数]-[(n-1)行の係数×商] より、
  商  x               y
      1               0
  1   0               1
  6   1-0×1=1        0-1×1=-1
  2   0-1×6=-6       1-(-1)×6=7
      1-(-6)×2=13    (-1)-7×2=-15
(終り)



CALL ExGCD(37,32,x,y,c)
PRINT x;y;c
END
EXTERNAL SUB ExGCD(A,B,x,y,c) !拡張ユークリッドの互除法
!A>0,B>0に対して、Ax+By=cとなるx,y,c=gcd(A,B)を求める
LET c=A
LET c1=B
LET x=1
LET x1=0
LET y=0
LET y1=1
DO WHILE c1>0
   PRINT x;y; c !debug
   !PRINT x1;y1; c1 !debug
   LET Q=INT(c/c1)
   LET R=MOD(c,c1)
   PRINT Q;R !debug
   LET x2=x-Q*x1
   LET y2=y-Q*y1
   LET c=c1
   LET c1=R
   LET x=x1
   LET x1=x2
   LET y=y1
   LET y1=y2
LOOP
END SUB


実行結果

1  0  37
1  5
0  1  32
6  2
1 -1  5
2  1
-6  7  2
2  0
13 -15  1



その2 再帰呼び出し

CALL ExGCD2(37,32,x,y,c)
PRINT x;y;c
PRINT
END
EXTERNAL SUB ExGCD2(a,b, x,y,c) !拡張ユークリッドの互除法
!A>0,B>0に対して、Ax+By=cとなるx,y,c=gcd(A,B)を求める
IF b=0 THEN
   LET x=1 !a×1+b×0=a
   LET y=0
   LET c=a
   PRINT x;y !debug
ELSE
   LET q=INT(a/b)
   LET r=MOD(a,b)
   PRINT a;b; q !debug
   CALL ExGCD2(b,r, u,v,c)
   LET x=v
   LET y=u-v*q
   PRINT x;y; q !debug
END IF
END SUB


実行結果

37  32  1
32  5  6
5  2  2
2  1  2
1  0
0  1  2
1 -2  2
-2  13  6
13 -15  1
13 -15  1





別解 互除法+連立方程式
A=Q*B+Rとして、(R+BQ)X+BY=RX+B(QX+Y)と変形する。
例 37x+32y=1
(5+32×1)x+32y =5x+32(x+y) =5x+(2+5×6)(x+y) =2(x+y)+5{x+6(x+y)}
すなわち、2(x+y)+5(7x+6y)と変形する。
ここで2×(-2)+5×1=1より、連立方程式x+y=-2, 7x+6y=1を得る。
これを解いて、x=13, y=-15
(終り)


 

戻る