GCD: 最大公約数に到るあれこれ

引数が負になるかもしれないときのGCDは(私のレベルの人間には)決して自明でないことに気付いた. GCD(-6, 8)=??? GCD(6, -8)=??? GCD(-6, -8)=???
そもそもC言語辺りを源流とする整数の除算と剰余演算の独特のルールが問題だ. q = a / b; r = a % b; のとき(ただし r が非零だったとする)

q
sign(a) = sign(b) なら q>0 ,そうでなければ q<0 .
r
必ず sign(r) = sign(a) かつ 0 ≦ |r| < |b| .

これは結構微妙なルールだ.
学校のMathematicaSSH接続でターミナルから使ってる 笑)では r = Mod[a, b] のとき sign(r) = sign(b) かつ 0 ≦ |r| < |b| を満たすようになっていた. a = qb + r はさすがにどこでも成り立つようになっているだろうけど... ぬ? ちょっともう学校の支度するんでまた明日.