程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> C語言基礎知識 >> 遞歸法求最大公約數和最小公倍數的實現代碼

遞歸法求最大公約數和最小公倍數的實現代碼

編輯:C語言基礎知識

       數學原理:

       設有兩個數num1和num2,假設num1比較大。令余數r = num1 % num2。
       當r == 0時,即num1可以被num2整除,顯然num2就是這兩個數的最大公約數。
       當r != 0時,令num1 = num2(除數變被除數),num2 = r(余數變除數),再做 r = num1 % num2。遞歸,直到r == 0。
       以上數學原理可以用具體的兩個數做一下分析,這樣容易理解。

代碼實現(求最大公約數):
代碼如下:

#include <iostream>
using namespace std;

int gcd(int a, int b);//聲明最大公約數函數

int main()
{
    int num1 = 1;
    int num2 = 1;   
    cin >> num1 >> num2;
    while(num1 == 0 || num2 == 0)//判斷是否有0值輸入,若有則重新輸入
    {
        cout << "input error !" << endl;
        cin >> num1 >> num2;
    }
    cout << "The gcd of " << num1 << " and " << num2 << " is: " << gcd(num1, num2) << endl;//調用最大公約數函數
    return 0;
}

int gcd(int a, int b)//函數定義
{
    int max = a > b ? a : b;
    int min = a < b ? a : b;
    a = max;
    b = min;
    int r = a % b;
    if(0 == r)//若a能被b整除,則b就是最大公約數。
        return b;
    else
        return gcd(b, r);//遞歸   
}

最小公倍數的求法建立在求最大公約數的方法之上。因為最小公倍數等於兩個數的積除以最大公約數。

代碼實現(求最小公倍數):
代碼如下:

#include <iostream>
using namespace std;

int gcd(int a, int b);//聲明最大公約數函數

int main()
{
    int num1 = 1;
    int num2 = 1;   
    int lcm = 1;
    cin >> num1 >> num2;
    while(num1 == 0 || num2 == 0)//判斷是否有0值輸入,若有則重新輸入
    {
        cout << "input error !" << endl;
        cin >> num1 >> num2;
    }
    lcm = num1 / gcd(num1, num2) * num2;//先除後乘可以在一定程度上防止大數
    cout << "The lcm of " << num1 << " and " << num2 << " is: " << lcm << endl;
    return 0;
}

int gcd(int a, int b)//函數定義
{
    int max = a > b ? a : b;
    int min = a < b ? a : b;
    a = max;
    b = min;
    int r = a % b;
    if(0 == r)//若a能被b整除,則b就是最大公約數。
        return b;
    else
        return gcd(b, r);//遞歸   
}

以上是僅僅限與求兩個書的最大公約數和最小公倍數,當數字有很多時,該法是否依然適用,還有待考證。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved