>行列まだ習ってないとかうせやろ!?もしかして文系?
とか言ってたから当然ユークリッドの互除法(数Aで習う)は知ってるものだと思ってました...
>ヒント
>AとBの最大公約数とBとA mod Bの最大公約数は等しい
これをプログラムで書くとこういうことです。
DEF GCD(A,B)
RETURN GCD(B,A MOD B)
END
ただしB=0のときMOD 0はできないから、その時だけはAとBの最大公約数を計算しないといけません。
B=0の時、Aと0の最大公約数はAです。
なので
IF B==0 THEN RETURN A
を追加すれば完成。
DEF GCD(A,B)
IF B==0 THEN RETURN A
RETURN GCD(B,A MOD B)
END
ところで、この関数はGCD(B,A MOD B)で呼び出してるから、
そもそもB=0ということはその前にA MOD B=0だったということですよね。
なので IF B==0 THEN の代わりに、IF A MOD B==0 THEN と先に調べておいても結果は同じです。
この時 RETURN A のAは、呼び出す前はBだったので、RETURN B になりますよ。
DEF GCD(A,B)
IF A MOD B==0 THEN RETURN B '(A←B、B←A MOD Bに置き換え。)
RETURN GCD(B,A MOD B)
END
このように「AとBの最大公約数とBとA mod Bの最大公約数は等しい」を繰り返し使って最大公約数を求める方法のことを「ユークリッドの互除法」(または単に「互除法」)と言います。