1. 程式人生 > >演算法基礎訓練題(一)

演算法基礎訓練題(一)

1.公約數 和 公倍數 (10分) C時間限制:1 毫秒 |  C記憶體限制:1 Kb
題目內容:
歐幾里得演算法求最大公約數
歐幾里得演算法求最大公約數
歐幾里得演算法求最大公約數
重要的事情說三遍...
必須使用這個演算法
歐幾里德演算法又稱輾轉相除法,用於計算兩個正整數a,b的最大公約數。
輸入描述
The input will consist of a series of pairs of integers a and b, separated by a space, one pair of integers per line. 
每一行輸入兩個整數a和b。
Process to end of file.
支援處理檔案尾

輸出描述
For each pair of input integers a and b you should output the gcd(a,b) and lcm(a,b) in one line, and with one line of output for each line in input. 
對於每組輸入,要求輸出 最大公約數 和 最小公倍數 在同一行,用空格隔開。

輸入樣例
3 5

輸出樣例
1 15

程式程式碼

#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int a,b;
while(cin>>a>>b){
int m=a*b;
if(a<b){
int temp=a;
    a=b;
    b=temp;
}
int temp;//輾轉相除法,用大數對小數求餘,再比較小數和餘,用較大的除較小的,直到餘==0,輸出最後較小數即為最大公約數,這為輾轉相除法,最小公倍數==兩數之積除以最大公約數
while(b!=0){
if(a<b){
      temp=a;
    a=b;
    b=temp;
   }
  temp=a%b;
  a=b;
  b=temp;
}
cout<<a<<" "<<m/a<<endl;
}
return 0;

}