/**
* 題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。 在循環中,隻要除數不等于0,用較大數除以較小的數,
* 将小的一個數作為下一輪循環的大數,取得的餘數作為下一輪循環的較小的數,
* 如此循環直到較小的數的值為0,傳回較大的數,此數即為最大公約數,最小公倍數為兩數之積除以最大公約數。
* 時間:2015年7月28日09:00:05
* 檔案:lianxi06.java
* 作者:cutter_point
*/
package bishi.zuixin50.t2015728;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
public class lianxi06
{
//我們用輾轉相除法來求最大公約數
public static int GreatestCommonDivisor(int m, int n)
{
//首先我們假定一個餘數是最大公約數
int chushu = m % n; //兩數的餘數,要麼就是最大公約數,要麼就是一個除數
int beichu = n; //這個是我們接下來的被除數
while(chushu != 0)
{
//當餘數不為0的時候,說明還沒有到最大公約數
int temp = chushu; //我們把除數備份
chushu = beichu % chushu; //求得新的除數
beichu = temp; //吧原來的除數作為新的被除數
}
//指導除數為0的時候說明到了最後的結果,最大公約數就是此時的被除數
return beichu;
}
//最大公倍數=兩數的積/最大公約數
public static int LeaseCommonMultiple(int m, int n)
{
//求得最大公約數
int greatestCommonDivisor = lianxi06.GreatestCommonDivisor(m, n);
return (m * n) / greatestCommonDivisor;
}
public static void main(String[] args) throws Exception
{
//System.out.println(System.getProperty("java.class.path"));
//System.out.println(new lianxi06().getClass().getProtectionDomain().getCodeSource().getLocation());
//我們從檔案中讀取相應的資料
FileInputStream infile = new FileInputStream(new File("source/zuixin50/lianxi06input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(infile, "utf-8"));
//我們把結果輸出到相應的檔案
FileOutputStream fos = new FileOutputStream(new File("source/zuixin50/lianxi06output.txt"));
//讀取一行資料
String line = "";
while( ( line = br.readLine() ) != null )
{
//每行資料我們用“\t”隔開
String a[] = line.split("\t");
int m, n;
//吧這兩個數轉化為整數
m = Integer.parseInt(a[0]);
n = Integer.parseInt(a[1]);
String out = m + " 和 " + n + "的最大公約數是:" + lianxi06.GreatestCommonDivisor(m, n) + "\n"
+ "\t最小公倍數是:" + lianxi06.LeaseCommonMultiple(m, n) + "\n";
System.out.println(out);
fos.write(out.getBytes());
}
//關閉流
fos.close();
br.close();
infile.close();
}
}