!容積が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
|