●210行目で、条件を満たすMとNを表示するように改良してみた。
・150行目を削除
・210行目にM,Nの計算を追加
100 INPUT PROMPT "p=": P
110 INPUT PROMPT "q=": Q
120 INPUT PROMPT "d=": D
130 LET U=0
140 FOR K=1 TO D !d以下の自然数kのうちで
150 !
160 FOR M=0 TO INT(K/P) !0からKをPで割った商まで
170 LET R=K-M*P !k-m*p=n*q
180 IF R-INT(R/Q)*Q=0 THEN GOTO 210 !rがqの倍数の場合 ※MOD(R,Q)=0
190 NEXT M
200 GOTO 230 !該当なし。次へ
210 PRINT K; M;INT(R/Q) !条件を満たすM,N ※
220 LET U=U+1
230 NEXT K
240 PRINT "総数="; U
250 END
*アルゴリズムの数学的背景
不定方程式 k=m*p+n*q は、k-m*p=n*q と変形される。
合同式で表すと、k-m*p≡0 mod q となる。
m は0以上の整数、p は自然数より、m*p≧0 となる。 同様に、n*q≧0。
また、n*q=k-m*p≧0 より、k≧m*p となる。
したがって解があれば、mは0~INT(K/P)で見つかる。
●(m,n)の組は一通りでない。その組を調べる。
・180行目を変更と追加(210,220行目)
・150,200,210,220行目を削除
100 INPUT PROMPT "p=": P
110 INPUT PROMPT "q=": Q
120 INPUT PROMPT "d=": D
130 LET U=0
140 FOR K=1 TO D !d以下の自然数kのうちで
150 !
160 FOR M=0 TO INT(K/P) !0からKをPで割った商まで
170 LET R=K-M*P !k-m*p=n*q
180 IF R-INT(R/Q)*Q=0 THEN !rがqの倍数の場合 ※MOD(R,Q)=0
PRINT K; M;INT(R/Q) !条件を満たすM,N
LET U=U+1
END IF
190 NEXT M
200 !
210 !
220 !
230 NEXT K
240 PRINT "総数="; U !※意味が変わる
250 END