首页 > 编程笔记

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("输入两个数:");
    scanf("%d%d", &m, &n);
    if (m < n)  /*比较大小,使得m中存储大数,n中存储小数*/
    {
        temp = m;
        m = n;
        n = temp;
    }
    for (i = m; i > 0; i++)  /*从大数开始寻找满足条件的自然数*/
        if (i % m == 0 && i % n == 0)
        {/*输出满足条件的自然数并结束循环*/
            printf("%d和%d的最小公倍数是%d\n", m, n, i);
            break;
        }

    return 0;
}
运行结果:

输入两个数:6 24
24和6的最小公倍数是24

优秀文章

添加微信咨询 扫码添加管理员微信 扫码添加管理员微信
微信ID:biancheng_yan