【C語言程序設計】C語言求最小公倍數(詳解版)!


問題描述

求任意兩個正整數的最小公倍數(LCM)。

 

問題分析

最小公倍數(Least Common Multiple,LCM),如果有一個自然數a能被自然數b整除,則稱a為b的倍數,b為a的約數,對於兩個整數來說,指該兩數共有倍數中最小的一個。計算最小公倍數時,通常會借助最大公約數來輔助計算。

最小公倍數=兩數的乘積/最大公約(因)數,解題時要避免和最大公約(因)數問題混淆。

對於最小公倍數的求解,除了利用最大公約數外,還可根據定義進行算法設計。要求任意兩個正整數的最小公倍數即,求出一個最小的能同時被兩整數整除的自然數。

 

算法設計

對於輸入的兩個正整數m和n每次輸入的大小順序可能不同,為了使程序具有一般性,首先對整數所m和n進行大小排序,規定變量m中存儲大數、變量n中存儲小數。

輸入的兩個數,大數m是小數n的倍數,那么大數m即為所求的最小公倍數;若大數m不能被小數n整除則需要尋找一個能同時被兩數整除的自然數。

從大數m開始依次向后遞增直到找到第一個能同時被兩數整除的數為止,所以循環變量i的初值為尋找第一個能同時被兩整數整除的自然數,並將其輸出。需要注意的是,在找到第一個滿足條件的i值后,循環沒必要繼續下去,所以用break來結束循環。

在上面的分析過程中沒有提到循環變量的終止條件,因i的最大值不能確定,像這種終止條件不確定的情況如何來表示?方法有兩種:

        第一,可以把判定條件表示成循環變量滿足的基本條件,如本例終止條件可表示成i>0;

        第二,終止條件省略不寫,利用循環體中的語句結束循環,如在找到第一個滿足條件的自然數時利用break語句結束循環。

 

下面是完整的代碼:

#include<stdio.h>

int main()

{

    int m, n, temp, i;

    printf("Input m & n:");

    scanf("%d%d", &m, &n);

    if(m<n)  /*比較大小,使得m中存儲大數,n中存儲小數*/

    { /*交換m和n的值*/

        temp=m;

        m=n;

        n=temp;

    }

    for(i=n; i>0; i--)  /*按照從大到小的順序尋找滿足條件的自然數*/

        if(m%i==0 && n%i==0)

        {/*輸出滿足條件的自然數並結束循環*/

            printf("The GCD of %d and %d is: %d\n", m, n, i);

            break;

        }

    return 0;

}

 

運行結果:

Input m & n:6 24

The LCW of 24 and 6 is: 24


 

不管你是轉行也好,初學也罷,進階也可,如果你想學編程,進階程序員~

【值得關注】我的 編程學習交流俱樂部 !【點擊進入】

全棧程序員正在等你加入~


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM