Problem F: 最大公約數、最小公倍數

Description

輸入兩個正整數m和n,輸出m、n的最大公約數和最大公倍數。先計算最大公約數,m和n得乘積除以最大公約數,就得到了最小公倍數。其中最大公約數可以用窮舉法求得,也可以用輾轉相除法求得。

Input

兩個正整數m和n,空格隔開

Output

m、n的最大公約數和最小公倍數。

提示:一般地說,求最小公倍數用兩個數的積除以最大公約數即可,而求最大公約數有多種算法:

\1. 窮舉法1,從1開始直到較小的數,每個數進行判斷,如果是公約數就保留此數到變量max中,最後留下的就是最大公約數
2.窮舉法2,從較小數由大到小列舉,直到找到公約數立即中斷列舉,得到的公約數便是最大公約數。
3.輾轉相除法,又名歐幾里德算法,是計算最大公約數和最小公倍數的重要方法,比窮舉法簡便得多。
主要過程是設兩數爲a,b,
1)a除以b得餘數àc;
2)如果c不等於0則:
bàa,càb,回到1);

Sample Input

12 48
20 12

Sample Output

12 48
4 60

輾轉相除求最大公約數和最小公倍數

#include<iostream>
int main()
{
    int m,n,sum,r;
    while(std::cin>>m>>n){
        r=1;sum=m*n;
        while(r!=0)
        {r=m%n;m=n;n=r;}
        std::cout<<m<<" "<<sum/m<<std::endl;
    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章