Java:無理やりな最小公倍数の求め方 [勉強]
Java演習問題の続きです。
課題は・・・「入力された2つの数値の最小公倍数を表示せよ」です。
最小公倍数??(´・ω・`) ハニャ?
なんか算数か数学で習ったっけ????
ちょっと分からないけど、「Java 最小公倍数」で検索するといろんなソースと出会いました。
そこからちょっと知恵を拝借。(^-^;
以下、無理やりな手段で最小公倍数を求めるソースです。
import java.io.*;
public class LeastCommonMultiple {
public static void main(String args[]) {
int input[] =new int[2];
BufferedReader kbd = new BufferedReader(new InputStreamReader(System.in));
System.out.println("入力された数値2つの最大公倍数を求めます。");
try {
for (int i = 0; i < 2 ;i++) {
System.out.print((i+1) + "つ目の数字を入力してください。 :");
input[i] = Integer.parseInt(kbd.readLine());
}
int m = input[0];
int n = input[1];
int r = 0; //余りを代入する変数
System.out.println("数値1,\t 数値2,\t 余り");
//ユークリッド互除法(最大公約数を求める)
while (n != 0) {
r = m % n;
System.out.println(m + "\t" + n + "\t" + r);
m = n;
n = r;
}
System.out.println("gcd(" + input[0] +"," + input[1] + ") =" + m);
int kouyaku = m;
System.out.println("");
//最小公倍数を求める
int koubai =((input[0] * input[1]) / kouyaku);
System.out.println(input[0] + "と" + input[1] + "の最小公倍数は " +koubai);
} catch (IOException e) {
System.out.println(e);
} catch (NumberFormatException e) {
System.out.println("正しい数値(整数)を入力してください。");
}
}
}
かなりの力業みたいですね。まずは2つの数値から最大公約数を計算して、そこから最小公倍数を求める方法です。
でも・・・もっとシンプルな方法で2つの数値の最小公倍数を求めることができるんですねぇ。
Mathメソッドとか使わないで、です。
以下が、もっとシンプルなソースです。
import java.io.*;
public class LastCommonMultiple{
public static void main(String[] args){
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try{
System.out.println("1つ目の数を入力してください。");
String line = reader.readLine();
int n = Integer.parseInt(line);
System.out.println("2つ目の数を入力してください。");
line = reader.readLine();
int m = Integer.parseInt(line);
int i=1;
while(i%n != 0 || i%m != 0){
i++;
}
System.out.println("最小公倍数は" + i + "です");
}catch(IOException e){
System.out.println(e);
}catch(NumberFormatException e){
System.out.println("正しい数値(整数)を入力してください。");
}
}
}
1つ目の数値と2つ目の数値を1から順に割っていき、両方の数値で割り切れた(余りが0)の値が最小公倍数みたいです。
1つのことを実現するにも、いろんな方法があって面白いですねぇ。
・・・しかし、私の書いたソースは、あまりにも力業すぎるなぁ。(^-^;
いろいろ勉強になりますなぁ。
コメント 0