よく使うので、ユークリッドの互除法で二つの整数の最大公約数を求める関数をメモ。
/** Java */
int gcd(int x, int y) {
int g = Math.max(Math.abs(x), Math.abs(y));
int l = Math.min(Math.abs(x), Math.abs(y));
while (l != 0) l = g % (g = l);
return g;
}
/** JavaScript */
function gcd(x, y) {
var g = Math.max(Math.abs(x), Math.abs(y));
var l = Math.min(Math.abs(x), Math.abs(y));
while (l != 0) l = g % (g = l);
return g;
}
再帰は使わない。再帰を使っていなければ、関数化しないでインラインで使うこともできて便利。大小関係がはっきりしている正整数が二つある場合、ユークリッドの互除法は本質的にはwhile (l != 0) l = g % (g = l);だけで表現できるんだね。
まずJavaで書いて、それをほぼそのままJavaScriptに移植したから、JavaScript側のコードは引数のチェックをしていない。必要な場合は整数かどうかのチェックをしておいたほうがいいと思う。