C語言求最小公倍數

在C語言中,你可以使用以下算法來求兩個數字的最低公倍數(LCM):

  1. 使用質因數分解法:將兩個數字分解為質因數,然後將所有質因數相乘得到最低公倍數。
  2. 使用歐幾里得算法(Euclidean algorithm):這個算法可以找到兩個數字的最大公約數(GCD),然後用其中一個數字除以GCD得到最低公倍數。

以下是一個使用質因數分解法的例子:

#include <stdio.h>
#include <math.h>

int main() {
    int a, b;
    printf("請輸入兩個數字以計算最低公倍數: ");
    scanf("%d %d", &a, &b);

    // 質因數分解法
    int min_lcm = 1;
    for (int i = 2; i <= sqrt(a); i++) {
        if (a % i == 0 && b % i == 0) {
            min_lcm *= i;
            while (a % i == 0 && b % i == 0) {
                a /= i;
                b /= i;
                min_lcm *= i;
            }
        }
    }
    if (a > 1) {
        min_lcm *= a;
    }
    if (b > 1) {
        min_lcm *= b;
    }

    printf("最低公倍數為: %d\n", min_lcm);
    return 0;
}

這個程式首先要求用戶輸入兩個數字,然後使用質因數分解法來計算它們的最低公倍數。注意,這個算法可能不是最高效的,特別是在處理大數字時。

如果你想要一個更高效的算法,你可以使用快速傅里葉質因數分解(FFT)或者更複雜的數學方法。然而,這些方法通常需要更多的代碼和計算資源。

如果你想要使用歐幾里得算法來求最低公倍數,你可以先求出兩個數字的最大公約數(GCD),然後用其中一個數字除以GCD得到最低公倍數。這可以通過以下代碼實現:

#include <stdio.h>

int gcd(int a, int b) {
    if (b == 0) {
        return a;
    }
    return gcd(b, a % b);
}

int lcm(int a, int b) {
    int g = gcd(a, b);
    return (a / g) * b;
}

int main() {
    int a, b;
    printf("請輸入兩個數字以計算最低公倍數: ");
    scanf("%d %d", &a, &b);

    printf("最低公倍數為: %d\n", lcm(a, b));
    return 0;
}

這個程式首先定義了一個函數gcd來計算兩個數字的最大公約數,然後定義了一個函數lcm來計算最低公倍數。lcm函數使用gcd函數來計算GCD,然後用其中一個數字除以GCD得到最低公倍數。