国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

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

2020-01-26 16:15:38
字體:
來源:轉載
供稿:網友


       數學原理:

       設有兩個數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);//遞歸   
}


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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 敦煌市| 河西区| 综艺| 台前县| 察隅县| 龙胜| 周口市| 巍山| 连州市| 庆元县| 保德县| 商水县| 吴忠市| 永清县| 静安区| 腾冲县| 辉县市| 凤山县| 永兴县| 犍为县| 威信县| 礼泉县| 扬州市| 霍城县| 桂平市| 台北县| 永靖县| 谷城县| 上饶县| 安吉县| 安龙县| 拜泉县| 乌拉特前旗| 永清县| 平潭县| 喀喇沁旗| 涟水县| 惠水县| 贵德县| 富顺县| 开化县|