最大公約數與最小公倍數

題目描述

輸入兩個正整數m和n,求其最大公約數和最小公倍數。

輸入

兩個整數

3輸出

最大公約數,最小公倍數

樣例輸入

5 7

樣例輸出

1 35

解析

輾轉相除法

輾轉相除法是古希臘求兩個正整數的最大公約數的,也叫歐幾里德算法,其方法是用較大的數除以較小的數,上面較小的除數和得出的余數構成新的一對數,繼續做上面的除法,直到出現能夠整除的兩個數,其中較小的數(即除數)就是最大公約數。以求288和123的最大公約數為例,操作如下:

288÷123=2余42
123÷42=2余39
42÷39=1余3
39÷3=13
所以3就是288和123的最大公約數。

注意事項:
  • 輾轉相除法在編程的實現,一個弊端就是必須是用大數對小數取余,所以要提前用條件語句判斷三種可能情況

  • 因為變量數較多,或者會有重復使用先前變量的步驟,而先前變量可能被改變,所以要提前用一些中間變量儲存先前變量的值。

兩數的乘積再除以兩數的最大公約數法。

這個方法雖然比較復雜,但是使用范圍很廣。因為兩個數的乘積等于這兩個數的最大公約數和最小公倍數的乘積。例如: 4和6的最大公約數是2,最小公倍數是12,那么,4X6=2X 12。

運行結果

#include<iostream>
using namespace std ;
int main()
{
    int t = 1 ;//取余計算的余數,賦值為1是為了方便進入while循環
    int m,n ;
    cin>>m>>n ;
    int nNum1 = m ;//中間變量:保存m
    int nNum2 = n ;//中間變量:保存n
    if(m > n)//判斷兩數的大小,保證用大數對小數取余
    {
        while(t != 0)
        {
            t = m % n ;
            m = n ;//將隨后循環中的m變成本次循環計算后的n
            n = t ;//將隨后循環中的n變成本次循環計算后的t
        }
        int b = (nNum1 * nNum2) / m ;//利用性質求出最小公倍數
        cout<<m<<" "<<b<<endl ;
    }
    else if(m < n)
    {
        while(t != 0)
        {
            t = n % m ;
            n = m ;
            m = t ;
        }
        int b = (nNum1 * nNum2) / n ;
        cout<<n<<" "<<b<<endl ;
    }
    else//當m=n時,最大公因數和最小公倍數相等,都等于他們本身
    {
        cout<<n<<" "<<n<<endl ;
    }
     
    return 0 ;
}

參考結果

  • 若有問題,請評論出來;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容