[メモ][Java][JavaScript] ユークリッドの互除法
- 2008-04-06
- カテゴリ: Client Side
- タグ: JavaScript Java アルゴリズム Tips
よく使うので、ユークリッドの互除法で二つの整数の最大公約数を求める関数をメモ。
/** 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側のコードは引数のチェックをしていない。必要な場合は整数かどうかのチェックをしておいたほうがいいと思う。
[Java] こういうときどうすればいいの?
- 2008-03-25
- カテゴリ: その他のプログラミング
- タグ: 安易な発想 Java Haskell
例えば、数値を分数のまま四則演算する有理数クラスが↓のようになっていたとします。
public class Rational {
private int numerator = 0;
private int denominator = 1;
public Rational(int numerator, int denominator) { ... }
public Rational add(Rational x) { ... }
public Rational subtract(Rational x) { ... }
public Rational multiply(Rational x) { ... }
public Rational divide(Rational x) { ... }
}
当然、このクラスを使う側では↓のようなコードを書くわけですね。
Rational add(Rational x, Rational y) {
return x.add(y);
}


![[13:59:24] LiosKの発言: XMLエディタ作りたい><](http://gyazo.com/8c26d559d19e5329c56417be117f5593.png)