求最小公倍数算法:

最小公倍数 = 两整数的乘积 ÷ 最大公约数

根据求最小公倍数的算法,可以看出如果已知最大公约数,就能很容易求出最小公倍数。而通过辗转相除法和相减法,可以求得最大公约数,下面分别进行介绍。

辗转相除法

已知有两整数mn,利用辗转相除法求它们的最大公约数,具体步骤如下:
m%n得余数t; ② 若t=0,则n即为两数的最大公约数;
③ 若t≠0,则m=nn=t,再回去执行①。

举例说明:
已知m = 21 n = 28,辗转相除法步骤如下:
① 执行t = m%n = 21%28 = 21, 则t = 21 ,此时t不为0,进入循环;
② 先执行m = 28 ,n = 21,再执行t = m%n = 28%21 = 7 ,则t = 7,此时t不为 0;
③ 先执行 m = 21 , n = 7,再执行t = m%n = 21%7 = 0 ,则t = 0 ,循环结束,n=7为最大公约数。


  1. int m,n,t;
  2. scanf("%d%d",&m,&n);
  3. t = m % n;
  4. while( t )
  5. {
  6. m = n;
  7. n = t;
  8. t = m%n;
  9. }

相减法

已知有两整数mn,利用相减法求它们的最大公约数,具体步骤如下:
① 若m > n,则m = m-n; ② 若m < n,则n = n-m; ③ 若m = n,则m(或n)即为两数的最大公约数;
④ 若m ≠ n,则再回去执行①。

例如求m=27n=15的最大公约数过程为:
m = 27-15 = 12 n = 15
m = 12 n = 15-12 = 3
m = 12-3 = 9 n=3
m = 9-3 = 6 n=3
m = 6-3 = 3 n=3
因此,n = 3即为最大公约数。


  1. int m,n,t;
  2. scanf("%d%d",&m,&n);
  3. while(m!=n)
  4. {
  5. if(m>n)
  6. m=m-n;
  7. else
  8. n=n-m;
  9. }

下面附相关数学知识

辗转相除法

辗转相除法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法。

例如,求(319,377):

∵ 319÷377=0(余319)

∴(319,377)=(377,319);

∵ 377÷319=1(余58)

∴(377,319)=(319,58);

∵ 319÷58=5(余29)

∴ (319,58)=(58,29);

∵ 58÷29=2(余0)

∴ (58,29)= 29;

∴ (319,377)=29。

可以写成右边的格式。

用辗转相除法求几个数的最大公约数,可以先求出其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个数为止。最后所得的那个最大公约数,就是所有这些数的最大公约数。

更相减损法

更相减损法:也叫更相减损术,是出自《九章算术》的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合。

《九章算术》是中国古代的数学专著,其中的“更相减损术”可以用来求两个数的最大公约数,即“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。”

翻译成现代语言如下:

第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。

第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。

则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。

其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法。所以更相减损法也叫等值算法

例1.用更相减损术求98与63的最大公约数。

解:由于63不是偶数,把98和63以大数减小数,并辗转相减:

98-63=35

63-35=28

35-28=7

28-7=21

21-7=14

14-7=7

所以,98和63的最大公约数等于7。

这个过程可以简单的写为:

(98,63)=(35,63)=(35,28)=(7,28)=(7,21)=(7,14)=(7,7)=7.

例2.用更相减损术求260和104的最大公约数。

解:由于260和104均为偶数,首先用2约简得到130和52,再用2约简得到65和26。

此时65是奇数而26不是奇数,故把65和26辗转相减:

65-26=39

39-26=13

26-13=13

所以,260与104的最大公约数等于13乘以第一步中约掉的两个2,即13*2*2=52。

这个过程可以简单地写为:

(260,104)(/2/2) =>(65,26)=(39,26)=(13,26)=(13,13)=13. (*2*2) => 52 [1]

比较辗转相除法与更相减损术的区别

(1)都是求最大公因数的方法,计算上辗转相除法以除法为主,更相减损术以减法为主,计算次数上辗转相除法计算次数相对较少,特别当两个数字大小区别较大时计算次数的区别较明显。

(2)从结果体现形式来看,辗转相除法体现结果是以相除余数为0则得到,而更相减损术则以减数与差相等而得到。

在解有关最大公约数、最小公倍数的问题时,常用到以下结论:

(1)如果两个自然数是互质数,那么它们的最大公约数是1,最小公倍数是这两个数的乘积。

例如8和9,它们是互质数,所以(8,9)=1,[8,9]=72。

(2)如果两个自然数中,较大数是较小数的倍数,那么较小数就是这两个数的最大公约数,较大数就是这两个数的最小公倍数。

例如18与3,18÷3=6,所以(18,3)=3,[18,3]=18。

(3)两个整数分别除以它们的最大公约数,所得的商是互质数。

例如8和14分别除以它们的最大公约数2,所得的商分别为4和7,那么4和7是互质数。

(4)两个自然数的最大公约数与它们的最小公倍数的乘积等于这两个数的乘积。

例如12和16,(12,16)=4,[12,16]=48,有4×48=12×16,即(12,16)× [12,16]=12×16。

(5)GCD(a,b) is the smallest positive linear combination of a and b. a与b的最大公约数是最小的a与b的正线性组合,即对于方程xa+yb=c来说,若x,a,y,b都为整数,那么c的最小正根为gcd(a,b).

输入两个正整数m和n,求其最大公约数和最小公倍数相关推荐

  1. C语言学习之输入两个正整数m和n,求其最大公约数和最小公倍数。

    输入两个正整数m和n,求其最大公约数和最小公倍数. #include <stdio.h> void main(){int m,n,temp,p,r;printf("请输入两个正整 ...

  2. python输入两个正整数m和n用for循环求其最大公约数_输入两个正整数,m和n,求其最大公约数和最小公倍数。...

    1. 输入两个正整数, m 和 n ,求其最大公约数和最小公倍数. 2. 输入一行字符,分别统计出其中字母.空格.数字和其他字符的个数. 3. 输入一个正整数求出它是几位数:输出原数和位数. 4. 输 ...

  3. C语言_算法_输入两个正整数m和n,求其最大公约数与最小公倍数

    (1)方式一:碾转相除法 #include <stdio.h> #include <math.h> /*输入两个数,求最大公约数 与最小公倍数分析关系:最小公倍数=两数的积/最 ...

  4. c语言gcb最小公倍数,C编序编程题目:输入两个正整数m和n,求其最大公约数和最小公倍...,C语言编程,输入两个正整数M和N(MN),计算M和N...

    问题标题 C编序编程题目:输入两个正整数m和n,求其最大公约数和最小公倍...,C语言编程,输入两个正整数M和N(M 2019-3-27来自ip:15.121.164.188的网友咨询 浏览量:228 ...

  5. C语言输人两个正整数m和n,求其最大公约数和最小公倍数

    #include <stdio.h> int main() {int p, r, n, m, temp;printf("请输入两个正整数n,m:");scanf(&qu ...

  6. c语言输入两个正整数m和n求其最小公倍数,用C语言编写:输入两个正整数m和n,求其最大公约数和最小公倍数....

    用C语言编写:输入两个正整数m和n,求其最大公约数和最小公倍数. 來源:互聯網  2010-05-25 15:19:26  評論 分類: 電腦/網絡 >> 程序設計 >> 其他 ...

  7. 输入3个正整数,输出3个数的最大公约数和最小公倍数。

    #include<stdio.h> //碾转相除法,求两个数的最大公约数 int gcd(int x,int y){int r;while(r=x%y!=0){r=x%y;x=y;y=r; ...

  8. Console-算法[if,while]-一输入两个正整数m和n,求其最大公约数和最小公倍数

    ylbtech-Arithmetic:Console-算法[if,while]-一输入两个正整数m和n,求其最大公约数和最小公倍数 1.A,Demo(案例) 输入两个正整数m和n,求其最大公约数和最小 ...

  9. c语言:输入两个正整数m和n,求其最大公约数和最小公倍数

    输入两个正整数m和n,求其最大公约数和最小公倍数. 解:程序: #include <stdio.h> int main() { int num1, num2, t,p; printf(&q ...

  10. ACMNO.7 输入两个正整数m和n,求其最大公约数和最小公倍数。 输入 两个整数 输出 最大公约数,最小公倍数 样例输入 5 7 样例输出 1 35

    题目描述 输入两个正整数m和n,求其最大公约数和最小公倍数. 输入 两个整数 输出 最大公约数,最小公倍数 样例输入 5 7 样例输出 1 35 来源/分类 C语言 示例照片: 设计思路: 本题最难的 ...

最新文章

  1. Ubuntu 14.04上安装pip3/numpy/matplotlib/scipy操作步骤
  2. 在浏览器输入URL回车之后发生了什么
  3. java 重建二叉树_【剑指offer】 Java实现重建二叉树
  4. ooooo123123emabc
  5. 在线画 有穷状态自动机 的软件_怎么画思维导图?不用下载软件,在线就能操作...
  6. 【Linux系统编程学习】C库IO函数与系统IO函数的关系
  7. Java中如何克隆集合——ArrayList和HashSet深拷贝
  8. android q哪些手机型号,华为公布8款安卓Q首批升级机型
  9. java解析XML大全(转)
  10. 【Oracle】添加注释(COMMENT ON)
  11. jsjavaScript打印99乘法表
  12. windows xp 美化大师
  13. 计算机电路基础答案刘怀望,计算机电路基础
  14. 个人银行账户管理系统课程设计报告
  15. 边写边学Python(14)球落地高度
  16. 关于JAVA的优势——跨平台和健壮性
  17. SylixOS进化简史
  18. 计算机作业微波炉工作的原理,微波炉工作电路原理图及功能图解
  19. 怎么删除桌面上的图标
  20. Linux学习笔记1(鸟哥的私房菜)

热门文章

  1. 高通CSRA6640单芯片DDFA放大器解决方案
  2. cf服务器人最多,玩家实测CF各大区在线人数排名 你的区排第几?
  3. Android 实现计时器功能,Android计时器的三种实现方式(Chronometer、Timer、handler)...
  4. M0内核单片机中断向量重映射
  5. mysql时区time_zone和sytem_time_zone
  6. java timezone 中国_Java中TimeZone类的常用方法
  7. 微信的自动回复接入聊天机器人
  8. 「手绘控笔技巧」最有效的控笔练习,让你少走很多弯路
  9. 中小企业知识管理难题怎么做?天翎与群晖携手给出最优解
  10. angular $element.html 数据展示不出来,element-ui Table 组件循环列表数据不显示?