新しく発言する  EXIT  インデックスへ

合同式による水汲み問題の解法


  合同式による水汲み問題の解法 山中和義 2008/03/16 14:11:01  (修正1回)
合同式による水汲み問題の解法  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/03/16 14:11:01 ** この記事は1回修正されてます
!容積が17リットルと29リットルの容器を使って、1リットルの水を汲む
!方程式 17*x≡1 mod 29

FOR i=1 TO 20 !回数
PRINT i;"回目"
LET a=17*i
LET b=MOD(a,29) !合同式 a≡b (mod m)
PRINT "くみ出し";INT(a/29);"回で、"; b;"リットル"
IF b=1 THEN EXIT FOR
NEXT i

END




!1次合同式 a*x≡b (mod m) を満たす x を求める

FUNCTION congruence(a,b,m)
IF m=0 THEN LET congruence=-1

LET c=a
LET e=b
LET d=m
LET f=0

LET r=MOD(c,d)
DO WHILE r<>0
LET q=INT(c/d)
LET c=d
LET d=r
LET tmp=f
LET f=e-q*f
LET e=tmp

LET r=MOD(c,d)
LOOP
IF MOD(b,d)<>0 THEN LET congruence=-1

LET q=MOD(INT(f/d),INT(m/d))
IF q<0 THEN LET q=q+INT(m/d)
LET congruence=q
END FUNCTION


LET x=congruence(17,1,29) !17*x≡1 (mod 29)

IF x<0 THEN
PRINT "解はありません。"
ELSE
PRINT "x="; x
END IF

END




その他の解法

拡張ユークリッド互除法
SAMPLEフォルダ内EUCLID.BAS参照

過去掲示板
http://freebbs.around.ne.jp/article/b/basic/102/gypiuo/gypiuo.html
  !合同式による計算機内部の整数演算(加算器... 山中和義 2008/03/16 14:13:27  (修正1回)
  │└つづき(乗算器) 山中和義 2008/03/16 14:16:08  (修正1回)
  !連立1次合同方程式を解く 山中和義 2008/03/21 18:45:05 

 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。