さて、掛け算・割り算を実装したので、次は足し算・引き算に行きたいところですが、ちょっとその前に最大公約数と最大公倍数を求めるモジュールを作っておこうかと思います。
何故かと言うと、足し算・引き算の時には分数の通分処理が必要になりますが、その時に最小公倍数を求める必要があるためです。更に、その最小公倍数を求めるには、最大公約数を求める必要があります。
ということでまずは最大公約数を求める関数を……と思ったんですが、Java には最大公約数を求めるための関数が既に用意されていますので、それを用いることにします。
public static long gcd(long a, long b){ return (BigInteger.valueOf(a)).gcd(BigInteger.valueOf(b)).longValue(); }
BigInteger というのは無限桁の整数を表現するためのクラスですが、最大公約数を求める関数gcd が実装されています。なので、一度long の値をBigInteger に変換した後、そのgcd の実装を利用して最大公約数を得ます。
さて、次は最小公倍数ですが、これは最大公約数が分かれば簡単に求めることが出来ます。
→ソースコード
public static long lcm(long a, long b){ if(a == 0 || b == 0)return 0; return (a * b / gcd(a, b)); }
では、実際に使ってみましょう。
→ソースコード
package org.dmwp.math; class MathUtilTest { public static void main(String[] args) throws Exception { calc(12, 30); calc(10, 15); } private static void calc(long a, long b) { System.out.println("a=" + a + ", b=" + b); System.out.println("gcd=" + MathUtil.gcd(a, b)); System.out.println("lcm=" + MathUtil.lcm(a, b)); System.out.println(); } }
上記のテストコードを実行すると、以下のようになります。
a=12, b=30 gcd=6 lcm=60 a=10, b=15 gcd=5 lcm=30
次回はこれらを利用して、通分処理や約分処理を実装してみたいと思います。