首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 實現最大公約數(GCD)與最小公倍數(LCM)計算:歐幾里得算法詳解

     編輯:程式設計疑難解答

歐幾里得算法(輾轉相除法)

int gcd(int a, int b) {
    while (b != 0) {
        int r = a % b;
        a = b;
        b = r;
    }
    return a; // 最大公約數
}

int lcm(int a, int b) {
    return a / gcd(a, b) * b; // 避免溢出先除後乘
}

完整程式

#include <iostream>
using namespace std;

int gcd(int a, int b) {
    while (b) { int r = a % b; a = b; b = r; }
    return a;
}

int main() {
    int x, y;
    cout << "請輸入兩個正整數: ";
    cin >> x >> y;
    if (x <= 0 || y <= 0) {
        cerr << "輸入必須為正整數" << endl;
        return 1;
    }
    cout << "最大公約數 (GCD): " << gcd(x, y) << endl;
    cout << "最小公倍數 (LCM): " << (long long)x / gcd(x, y) * y << endl;
    return 0;
}

複雜度分析

  • 時間複雜度:O(log min(a,b))
  • 空間複雜度:O(1)

擴展:遞歸寫法

int gcd_recursive(int a, int b) {
    return b == 0 ? a : gcd_recursive(b, a % b);
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved