这里将介绍求两个正整数的最小公倍数(Least Common Multiple,LCM)的方法。提供两种主要思路,一种是直接根据最小公倍数的定义设计算法,一种是由最大公约数计算得出。下面来介绍这两种方法。

定义法

求解两个正整数的最小公倍数的第一种思路,根据定义设计算法,最小公倍数的本质是一个最小的能同时被两整数整除的自然数。我们先比较两数大小,从较大数开始向上递增,直到找到那个最小公倍数。

代码如下:

#include<stdio.h>
int main()
{int i=0;int m,n,temp;printf("请输入两个正整数:");scanf("%d %d",&m,&n);if(m<n)   //比较大小,使m为较大数,n为较小数 {temp=n;n=m;m=temp;}for(i=m;i>0;i++)   //从较大数开始寻找符合条件的最小公倍数 {if(i%m==0 && i%n==0){printf("%d和%d的最小公倍数是%d",m,n,i);break;}}return 0;
}  

辅助法

求最小公倍数也可以借助最大公约数辅助计算,公式为最小公倍数=两数的乘积/最大公约(因)数。解题时避免将两个问题混淆。

连续整除检测法

这种方法的实现原理是,先取出两个数中的较小数,赋值给temp(temporary),接着用其中一个数与temp求余,若余数不为0,则temp-1,循环该步骤直到余数为0。再用另一个数,重复此步骤,最后得出的值利用公式计算得到这两个数的最小公倍数。

代码如下:

#include<stdio.h>
int main()
{int i=0;int m,n,temp;printf("请输入两个正整数:");scanf("%d %d",&m,&n);if(m>n)   {temp=n;}else   //m=n在此不需要单独讨论 {temp=m;}for(i=temp;i>0;i--)   //如果从i=1开始,得出公约数也无法保证其为最大公约数。 {if(m%i==0 && n%i==0)break;}printf("%d和%d的最小公倍数是%d",m,n,m*n/i);return 0;
}

欧几里得算法

这种方法的实现原理是求两个正整数的余数r(remainder),再用两个正整数中的较小数与其再求余直到余数为0时,此时的较小数就是最大公约数。最后利用公式计算得到这两个数的最小公倍数。

代码如下:

#include<stdio.h>
int main()
{int m,n,r; printf("请输入两个正整数:");scanf("%d %d",&m,&n);int x=m*n;   //x用于存放m与n的乘积 printf("%d%和%d的最小公倍数是",m,n);   //此时输出m和n的值还没改变 r=m%n;while(r!=0)   //不用比较大小,若m小于n,则会在第一遍循环交换位置 {m=n;n=r;r=m%n;}printf("%d",x/n);return 0;
} 

相减法

这种方法比较易于理解,原理是先判断两个正整数大小,并将较大数与较小数的差值赋给较大数,循环此步骤直到两数相等,此时得出最大公约数。最后利用公式计算得到这两个数的最小公倍数。

代码如下:

#include<stdio.h>
int main()
{int m,n;printf("请输入两个正整数:");scanf("%d %d",&m,&n);int x=m*n;   //x用于存放m与n的乘积printf("%d%和%d的最小公倍数是",m,n);while(m!=n);{if(m>n){m=m-n;}else{n=n-m;}   }printf("%d",x/n);return 0;
}

最后把这几种方法构建为函数lcm并尝试调用。

代码如下:

#include<stdio.h>int lcm1(int m,int n)
{int i=0;int temp;if(m<n)   //比较大小,使m为大数,n为小数 {temp=n;n=m;m=temp;}for(i=m;i>0;i++)   //从大数开始寻找符合条件最小公倍数 {if(i%m==0 && i%n==0){break;}}return i;
}int lcm2(int m,int n)
{int i=0;int temp;if(m>n)   {temp=n;}else   //m=n在此不需要单独讨论 {temp=m;}for(i=temp;i>0;i--)   //如果从i=1开始,得出公约数也无法保证其为最大公约数。 {if(m%i==0 && n%i==0)break;}return i;
}int lcm3(int m,int n)
{int r=m%n;while(r!=0)   //不用比较大小,若m小于n,则会在第一遍循环交换位置 {m=n;n=r;r=m%n;}return n;
}int lcm4(int m,int n)
{while(m!=n){if(m>n){m=m-n;}else{n=n-m;}  }return n;
}int main()
{printf("请输入两个正整数: ");int x,y;scanf("%d %d",&x,&y);int a=lcm1(x,y);int b=lcm2(x,y);int c=lcm3(x,y);int d=lcm4(x,y);printf("%d和%d的最小公倍数为%d\n",x,y,a);printf("%d和%d的最小公倍数为%d\n",x,y,x*y/b);printf("%d和%d的最小公倍数为%d\n",x,y,x*y/c);printf("%d和%d的最小公倍数为%d",x,y,x*y/d);return 0;
}

尝试运行结果:

这篇文章涉及到了求解两个正整数的最大公约数的三种方法,我在另一篇文章中有所介绍(文章链接如下)
求两个正整数的最大公约数的三种方法
求解最大公约数与最小公倍数有很多相似的思路,理解好便可熟练应用。

C语言求两个正整数的最小公倍数相关推荐

  1. c语言两个正整数的最小公倍数,C语言求两个正整数的最小公倍数

    这里将介绍求两个正整数的最小公倍数(Least Common Multiple,LCM)的方法.提供两种主要思路,一种是直接根据最小公倍数的定义设计算法,一种是由最大公约数计算得出.下面来介绍这两种方 ...

  2. 求两个正整数的最小公倍数

    Java语言程序设计(基础篇) 编程综合题 6.29 求最小公倍数 编写程序,提示用户输入两个整数并求它们的最小公倍数(LCM). 两个数的最小公倍数是指这两书的倍数中最小的数. 例如, 8和12的最 ...

  3. php怎么求最小公倍数,C++_详解C语言求两个数的最大公约数及最小公倍数的方法,求两个正整数的最大公约数nbs - phpStudy...

    详解C语言求两个数的最大公约数及最小公倍数的方法 求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法.通式分别为 f(x, y) = f(y, x%y) ...

  4. 三种算法求两个正整数的最大公约数和最小公倍数;求三个数的最大公约数和最小公倍数

    第二次作业 题目:求两个正整数的最大公约数和最小公倍数. 基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出. 提高要求:1.三种以上算法解决两个正整 ...

  5. c语言求两个数的最小公倍数辗转相除法,C语言辗转相除法求2个数的最小公约数...

    辗转相除法最大的用途就是用来求两个数的最大公约数. 用(a,b)来表示a和b的最大公约数. 有定理: 已知a,b,c为正整数,若a除以b余c,则(a,b)=(b,c). (证明过程请参考其它资料) 例 ...

  6. c语言求出两个最大素数,求两个正整数的最大公约数      思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法。通式分别为 f(x, y) = f(y, x%y...

    求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法.通式分别为 f(x, y) = f(y, x%y), f(x, y) = f(y, x - y) ( ...

  7. C语言丨求两个正整数的最大公约数

    两个正整数的最大公约数(Greatest Common Divisor, GCD)是能够整除这两个整数的最大整数.两个正整数的最大公约数的求法有多种解答,本文就三种方法做详细介绍:穷举法.欧几里得算法 ...

  8. 求两个正整数的最大公约数和最小公倍数

    基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出. 提高要求:1.三种以上算法解决两个正整数最大公约数问题. 2.求3个正整数的最大公约数和最小公倍 ...

  9. 求两个正整数的最大公因数和最小公倍数

    求两个正整数的最大公因数和最小公倍数 两个正整数最大公因数和最小公倍数的关系 更相减损术 原理: 代码实现: 辗转相除法 原理: 代码实现: 穷举法 原理: 代码实现: Stein算法 原理: 两数都 ...

最新文章

  1. PyTorch学习之六个学习率调整策略
  2. 虚拟主机IIS防范入侵常见问答
  3. 如何在线将pdf转换成ppt格式
  4. IDEA安装和运行HelloWorld
  5. deepin nginx连接php,利用docker运行nginx加上本机的php-fpm。访问html文件正常,但是访问php文件就报错404...
  6. Java-变量函数 上
  7. spring—第一个spring程序
  8. Linux系统编程 / triggerhappy 源码分析(3.select 的应用)
  9. ssm框架整合_框架整合战斗压缩粮篇SpringCloud+SpringBoot+SSM
  10. 安装成功后python报错_python安装mysql的依赖包mysql-python操作
  11. 最新出炉!java私塾下载
  12. html 语音识别输入法,9种外语语音识别 搜狗输入法成国内支持语种最多输入法...
  13. 第6章 Python 数字图像处理(DIP) - 彩色图像处理1 - RGB彩色模型,RGB to Gray,CMK和CMYK彩色模型,HSI彩色模型
  14. Oracle 11g 扩展UNDO表空间
  15. Android MQTT TLS/SSL 认证
  16. 延期年金(deferred annuity)
  17. 计算机专业征兵,计算机应用工程系征兵宣传大会顺利召开──保家卫国,学子应征...
  18. 单片机学习笔记————为指针加上紧箍咒const,避免意外修改了只做输入接口的数据
  19. 关于硕士毕业论文中会议conference的参考文献格式修正GB7714-87#outputstyle#endnote
  20. 微信小程序给我们带来哪些改变?小程序生态中暗藏着哪些机会?

热门文章

  1. 旅游行业“春来早”,走着瞧旅行云南踏青游正火爆
  2. python从邮箱获取指定邮件_用python提取并统计指定邮箱里的特定邮件 | 学步园
  3. 如何让浏览器直接下载后端返回的图片而不是打开
  4. matlab 热图,基于表格数据创建热图
  5. (转载)使用Perl编写协议分析脚本
  6. 预测数值型数据:回归
  7. GrayWorld 色彩均衡算法
  8. iOS App 名字国际化的办法
  9. 千道Java面试真题整理系列:MySQL灵魂五十问,在遇面试也不怕.
  10. 状态码的含义,以及HTTP中常见的状态码