EeBlog(テクニカルブログ)

ユークリッドの互助法

ユークリッドの互助法という名前のアルゴリズムを紹介します。これは最大公約数を求めるアルゴリズムで、

ある整数x,yの最大公約数gcd(x,y)の解を求めるとして、yが0であればx、そうでなければgcd(y, x % y)が解となる。

という至って単純なアルゴリズムです。

以下のコードはこのアルゴリズムを再帰で実装したものです。ループで実装したコードはコメントアウトされています。(再帰のほうが断然エレガントである)

sample/GCDSample.java

package sample;

public class GCDSample {

	public static int gcd(int x, int y) {
		return y == 0 ? x : gcd(y, x % y);
	}

/*
	public static int gcd(int x, int y) {
		while (y != 0) {
			int t = x % y;
			x = y;
			y = t;
		}
		return x;
	}
*/
	public static void main(String[] args) {
		System.out.println(gcd(1071, 1029);
	}
}