SSブログ

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つのことを実現するにも、いろんな方法があって面白いですねぇ。
・・・しかし、私の書いたソースは、あまりにも力業すぎるなぁ。(^-^;

いろいろ勉強になりますなぁ。


nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:資格・学び

nice! 1

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。