1. 程式人生 > >最大公約數和最小公倍數(Greatest Common Divisor and Least Common Multiple)

最大公約數和最小公倍數(Greatest Common Divisor and Least Common Multiple)

定義:

最大公約數(英語:greatest common divisor,gcd)。是數學詞彙,指能夠整除多個整數的最大正整數。而多個整數不能都為零。例如8和12的最大公因數為4。

最小公倍數是數論中的一個概念。若有一個數$$X$$,可以被另外兩個數$$A$$、$$B$$整除,且$$X$$大於(或等於)$$A$$和$$B$$,則$$X$$X為$$A$$和$$B$$的公倍數。$$A$$和$$B$$的公倍數有無限個,而所有的公倍數中,最小的公倍數就叫做最小公倍數。兩個整數公有的倍數稱為它們的公倍數,其中最小的一個正整數稱為它們兩個的最小公倍數。

輾轉相除法:兩個整數的最大公約數等於其中較小的數和兩數的差的最大公約數。例如,252和105的最大公約數是21 $$ (252=21\times 12;105=21\times 5)$$因為 252 − 105 = 21 × (12 − 5) = 147 ,所以147和105的最大公約數也是21。在這個過程中,較大的數縮小了,所以繼續進行同樣的計算可以不斷縮小這兩個數直至其中一個變成零。這時,所剩下的還沒有變成零的數就是兩數的最大公約數。

運用輾轉相除法來計算最大公約數和最小公倍數

#include <stdio.h>

int main()
{
    int a, b;
    printf("請輸入兩個數:\n");
    scanf("%d%d", &a, &b);

    int x = a, y = b;

    while (b != 0)
    {
        int temp = a % b;
        a = b;
        b = temp;
    }

    printf("最大公約數:%d\n", a);
    printf("最下公倍數:%d\n", x * y / a);

    return 0;
}

使用自定義函式來計算最大公約數和最小公倍數

int GCD(int a, int b)
{
    if (b)
        while ((a %= b) && (b %= a));
    return a + b;
}

int LCM(int a, int b) 
{
    return a * b / GCD(a, b);
}