服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言实现求解最小公倍数的算法示例

C语言实现求解最小公倍数的算法示例

2022-07-24 17:58小辉_Super C/C++

这篇文章主要为大家介绍了C语言如何实现求解任意两个正整数的最小公倍数,文中采用了穷举法和定理法。感兴趣的小伙伴快来跟随小编一起学习学习吧

题目描述

求任意两个正整数的最小公倍数

问题分析

两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。整数a,b的最小公倍数记为[a,b],同样的,a,b,c的最小公倍数记为[a,b,c],多个整数的最小公倍数也有同样的记号。

.与最小公倍数相对应的概念是最大公约数,a,b的最大公约数记为(a,b)。关于最小公倍数与最大公约数,我们有这样的定理:(a,b)x[a,b]=ab(a,b均为整数)。

——百度百科

我们可以通过两个方法求最小公倍数。

第一种是穷举法,列举所以可能的数,直到找到最小的公倍数;第二种是使用最小公倍数与最大公约数的一个定理——两个整数的最小公倍数等于两数之积除以两个数的最大公因数,即(a,b)x[a,b]=ab((a,b)表示a和b的最大公约数,[a,b]表示a和b的最小公倍数,a,b均为整数)

方法一:穷举法

假设有两个整数num1和num2,这两个整数的最小公倍数一定大于等于它们的最大值,同时小于等于它们的积。

按从小到大的顺序遍历整个范围内的所有整数,第一个公因数即为它们的最小公倍数。

【不考虑负数,求负数的最小公倍数本就是无意义的(相当于求两个正数的最大公倍数)】

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
 
/**
 * @brief 获取最小公倍数(穷举法)
 * @param num1 第一个正整数
 * @param num2 第一个正整数
 * @return 返回最小公倍数
 */
int Get_Min_Comm_Multiple(int num1, int num2)
{
    int i = 0, tmp = 0, mul = 0;
    tmp = num1 > num2 ? num1 : num2; //获取最大值
    mul = num1 * num2;   //两数之积
    for(i = tmp; i <= mul; i++)
    {
        //同时为num1和num2的倍数
        if(i % num1 == 0 && i % num2 == 0)
            break;
    }
    return i;
}
 
int main()
{
    int num1, num2;
 
    printf("请输入两个正整数\n");
    scanf("%d%d", &num1, &num2);
    printf("它们的最小公倍数为:%d\n",Get_Min_Comm_Multiple(num1, num2));
    return 0;
}

运行结果

C语言实现求解最小公倍数的算法示例

方法二:定理法

使用定理求最小公倍数(两个整数的最小公倍数等于两数之积除以两个数的最大公因数),需要先求出两个整数的最大公因数,最大公因数这里采用辗转相除法。(最大公因数的求法可以参考我上一篇文章——第68天:求最大公约数(使用三种方法))

【不考虑负数,求负数的最小公倍数本就是无意义的(相当于求两个正数的最大公倍数)】

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>
 
/**
 * @brief 获取两个正整数的最大公因数(辗转相除法)
 * @param num1  第一个正整数
 * @param num2  第二个正整数
 * @return      最大公因数
 */
int Get_Max_Comm_Divisor(int num1, int num2)
{
    int remainder = num1 % num2;  //余数
 
    while(remainder != 0)
    {
        num1 = num2;      //更新被除数
        num2 = remainder; //更新除数
        remainder = num1 % num2; //更新余数
    }
    return num2;  //最后的除数即为最大公因数
}
 
/**
 * @brief 获取最小公倍数(定理法)
 * @param num1 第一个正整数
 * @param num2 第一个正整数
 * @return 返回最小公倍数
 */
int Get_Min_Comm_Multiple(int num1, int num2)
{
    /* 最小公倍数 = 两数相乘 / 最大公因数 */
    return num1 * num2 / Get_Max_Comm_Divisor(num1, num2);
}
 
int main()
{
    int num1 = 0, num2 = 0;
 
    printf("请输入两个正整数\n");
    scanf("%d%d", &num1, &num2);
    printf("它们的最小公倍数为:%d\n", Get_Min_Comm_Multiple(num1, num2));
    return 0;
}

运行结果

C语言实现求解最小公倍数的算法示例

如果程序不作处理(不检测输入的数字是否为正数),此时输入负数,也能返回一个公倍数,但不是“最小”公倍数,不过求负数的最小公倍数本就是无意义的(相当于求两个正数的最大公倍数)。

C语言实现求解最小公倍数的算法示例

到此这篇关于C语言实现求解最小公倍数的算法示例的文章就介绍到这了,更多相关C语言求解最小公倍数内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_43772810/article/details/122064989

延伸 · 阅读

精彩推荐
  • C/C++C++基于文件流与armadillo读取mnist示例详解

    C++基于文件流与armadillo读取mnist示例详解

    这篇文章主要给大家介绍了关于C++基于文件流与armadillo读取mnist的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学...

    c艹用户9222021-11-05
  • C/C++C++ 多重继承和虚拟继承对象模型、效率分析

    C++ 多重继承和虚拟继承对象模型、效率分析

    本文简单介绍多态和多重继承、虚拟继承的基本概念。随后重点分析了C++中对象模型之间的差异和运行效率 ...

    C++教程网9932021-01-28
  • C/C++Qt自绘实现苹果按钮滑动效果的示例代码

    Qt自绘实现苹果按钮滑动效果的示例代码

    这篇文章主要介绍了Qt自绘实现苹果按钮滑动效果的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    花狗Fdog_6052021-09-30
  • C/C++C++实现LeetCode(49.群组错位词)

    C++实现LeetCode(49.群组错位词)

    这篇文章主要介绍了C++实现LeetCode(49.群组错位词),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    Grandyang7072021-11-29
  • C/C++C++实现LeetCode(112.二叉树的路径和)

    C++实现LeetCode(112.二叉树的路径和)

    这篇文章主要介绍了C++实现LeetCode(112.二叉树的路径和),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    Grandyang7692021-11-26
  • C/C++C++中临时对象的常见产生情况及其解决的方案

    C++中临时对象的常见产生情况及其解决的方案

    这篇文章主要是探讨常见的临时对象产生的情况,及其如何避免和解决这种临时对象产生的方式。具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    呋喃吖10912022-01-05
  • C/C++OpenCV 颜色追踪的示例代码

    OpenCV 颜色追踪的示例代码

    这篇文章主要介绍了OpenCV 颜色追踪的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随...

    Laniakea6692021-08-12
  • C/C++C语言中压缩字符串的简单算法小结

    C语言中压缩字符串的简单算法小结

    这篇文章主要介绍了C语言中可用于实现字符串压缩的简单算法小结,列举了包括哈夫曼算法等三个核心的程序实现算法,需要的朋友可以参考下...

    wuzhekai19855062021-03-27