首页 > 其他分享 >最大公约数和最小公倍数的解法

最大公约数和最小公倍数的解法

时间:2023-07-12 19:48:09浏览次数:38  
标签:12 gcd 公倍数 36 最大公约数 解法 小数

最大公约数和最小公倍数的解法

什么是最大公约数和最小公倍数?

  • 最大公约数(Greatest Common Divisor,GCD)是指两个或多个整数共有约数中最大的一个。例如,12 和 18 的最大公约数是 6,因为它们都可以被 6 整除,而且没有比 6 更大的约数。
  • 最小公倍数(Least Common Multiple,LCM)是指两个或多个整数共有的倍数中最小的一个。例如,12 和 18 的最小公倍数是 36,因为它们都是 36 的倍数,而且没有比 36 更小的公倍数。

如何求最大公约数和最小公倍数?

求最大公约数和最小公倍数的方法有多种,常见的有以下四种:

  • 质因数分解法:先把两个整数分别分解成质因数的乘积形式,然后找出它们共有的质因数,并将这些质因数相乘,所得的积就是最大公约数。再将两个整数的所有质因数相乘,所得的积除以最大公约数,就是最小公倍数。
  • 辗转相除法:也叫欧几里德算法,是利用两个整数的最大公约数等于其中较小的那个数和两数取模的最大公约数这一性质,即

    gcd(a,b)=gcd(b,amodb)

    ,其中

    a>b

    。具体步骤如下:
    • 用较大数除以较小数,得到余数;
    • 如果余数为0,算法结束,较小数即为最大公约数;
    • 如果余数不为0,用较小数除以余数,重复上述步骤。
  • 更相减损法:出自于中国古代的《九章算术》,是利用两个整数的最大公约数等于其中较小的那个数和两数相减的差的最大公约数这一性质,即

    gcd(a,b)=gcd(b,a−b)

    ,其中

    a>b

    。具体步骤如下:
    • 比较两个数的大小,用较大数减去较小数,得到差;
    • 如果差为0,算法结束,两个数相等,它们本身就是最大公约数;
    • 如果差不为0,用较小数和差比较大小,重复上述步骤。
  • Stein算法:是结合了辗转相除法和更相减损法的优势以及移位运算的一种高效算法。它利用了移位运算和按位与运算来判断一个整数是否为偶数,并根据以下性质进行计算:
    • a

      b

      均为偶数时,

      gcd(a,b)=2×gcd(a/2,b/2)=2×gcd(a>>1,b>>1)

    • a

      是偶数,

      b

      是奇数时,

      gcd(a,b)=gcd(a/2,b)=gcd(a>>1,b)

    • a

      是奇数,

      b

      是偶数时,

      gcd(a,b)=gcd(a,b/2)=gcd(a,b>>1)

    • a

      b

      均为奇数时,先比较大小,然后用较大数减去较小数的结果和较小数递归调用函数,即

      gcd(a,b)=gcd(b,a−b)

      ,此时

      a−b

      的结果必然是偶数,又可以继续进行移位运算。

举例说明

下面我们用一个例子来说明这四种方法的具体过程。假设我们要求 36 和 24 的最大公约数和最小公倍数。

  • 质因数分解法

    • 分解质因数:

      36=2×2×3×3,24=2×2×2×3

    • 找出共有的质因数:

      2×2×3

    • 相乘得到最大公约数:

      12

    • 将两个整数的所有质因数相乘:

      36×24=25×34

    • 除以最大公约数得到最小公倍数:

      72

  • 辗转相除法

    • 用较大数除以较小数,得到余数:

      36÷24=1……12

    • 如果余数为0,算法结束,较小数即为最大公约数;如果余数不为0,用较小数除以余数,重复上述步骤:

      24÷12=2……0

    • 最大公约数为

      12

    • 最小公倍数等于两个整数的乘积除以最大公约数:

      36×24÷12=72

  • 更相减损法

    • 比较两个数的大小,用较大数减去较小数,得到差:

      36−24=12

    • 如果差为0,算法结束,两个数相等,它们本身就是最大公约数;如果差不为0,用较小数和差比较大小,重复上述步骤:

      24−12=12

    • 最大公约数为

      12

    • 最小公倍数等于两个整数的乘积除以最大公约数:

      36×24÷12=72

  • Stein算法

    • 如果

      a

      b

      都为0,算法结束,最大公约数为0;如果

      a

      b

      中有一个为0,算法结束,最大公约数为另一个非零数;如果

      a

      b

      都不为0,继续下一步;
    • 如果

      a

      b

      都为偶数,用移位运算和按位与运算判断,然后用右移一位的结果递归调用函数,并将结果乘以2;如果

      a

      是偶数,

      b

      是奇数或者反过来,用移位运算和按位与运算判断,然后用右移一位的

      a

      和原来的

      b

      或者反过来递归调用函数;如果

      a

      b

      都为奇数,先比较大小,然后用较大数减去较小数的结果和较小数递归调用函数;
      • 判断 $$36 (100100) 和 24 (11000) 是否都为偶数:是,则右移一位并递归调用函数,并将结果乘以2;
      • 判断 $$18 (10010) 和 12 (1100) 是否都为偶数:是,则右移一位并递归调用函数,并将结果乘以2;
      • 判断 $$9 (1001) 和 6 (110) 是否都为偶数:否,则判断是否有一个是偶数:是,则右移一位的6和原来的9递归

标签:12,gcd,公倍数,36,最大公约数,解法,小数
From: https://www.cnblogs.com/shoshana-kong/p/17548618.html

相关文章

  • HJ108 求最小公倍数
    1.题目读题HJ108 求最小公倍数  考查点 2.解法思路 最小公倍数一般有两种计算方法:分解质因数法和公式法。分解质因数法就是先把要求最小公倍数的那几个数分别分解质因数,然后将原来几个数里所含该质因数的最多个数的每一个质因数相乘,所得的积就是要求的最小公......
  • 多元融合:流媒体传输网络的全盘解法
    我们在寻找「网络」的全盘解法。音视频数字化在消费领域的红利俨然见顶,而产业级视频应用激活了更多场景下的业务模式。与此同时,音视频客户也从单一的业务需求,趋向于多种业务并行存在的需求。固有的网络能满足新兴的业态吗?延时与成本之间存在区间最优解吗?业务的升级切换如何不再......
  • 【LeetCode剑指offer#05】回文链表的两种解法+删除链表中间节点(链表的基本操作)
    回文链表给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。示例1:输入:head=[1,2,2,1]输出:true示例2:输入:head=[1,2]输出:false提示:链表中节点数目在范围[1,105]内0<=Node.val<=9思路将值复制到数组中后用双指针......
  • 求最大公约数
    求最大公约数枚举法publicclassDemo3_01{publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);intleft=scanner.nextInt();intright=scanner.nextInt();intresult=1;for(int......
  • 动态规划之 附录二:背包问题的搜索解法
    《背包问题九讲》的本意是将背包问题作为动态规划问题中的一类进行讲解。但鉴于的确有一些背包问题只能用搜索来解,所以这里也对用搜索解背包问题做简单介绍。大部分以01背包为例,其它的应该可以触类旁通。简单的深搜对于01背包问题,简单的深搜的复杂度是O(2^N)。就是枚举出所有2^N......
  • 2023-06-30《计算方法》- 陈丽娟 - 线性方程组的迭代解法.md
    2023-06-30《计算方法》-陈丽娟-线性方程组的迭代解法Matlab计算方法JacobiGauss-SeidelSORSSOR定常迭代法所谓迭代法实际上是求解一个关于映射的不动点问题:然后利用构造一个迭代格式这里表示T的一个复合函数,其可能随迭代次数而改变,最终目标即是得到.下面我们给出收敛......
  • 最大公约数和最小公倍数
    #求最大公约数86最大公约数是2deffun_gongyue(p,q):temp=p%q#2whiletemp!=0:p=q#6q=temp#q=2temp=p%q#0returnqprint(fun_gongyue(6,8))#求最小公倍数两数乘积/最大公约数d......
  • 2023-06-27《计算方法》- 陈丽娟 - 线性方程组的直接解法.md
    2023-06-27《计算方法》-陈丽娟-线性方程组的直接解法Matlab计算方法高斯消元法矩阵分解线性方程组的解法这一课题我们在高等代数中已经了解过,对于一个非奇异方阵,通过求解或者克莱姆法则均可以直接得到方程的精确解,但是上述方法计算量很大,难以在实际中应用,因此引出了本章的内......
  • 递推方程的几种解法
    目录一、常系数线性齐次递推方程1.定义2.特征方程3.递推方程的通解4.例题二、常系数线性非齐次递推方程1.定义2.特征方程3.递推方程的通解4.确定非齐次方程的特解5.例题三、其他解法1.数学归纳法(用于证明)2.迭代归纳法3.差消法4.一些技巧一、常系数线性齐次递推方程......
  • Python 求最大公约数
    题目要求求最大公约最简单快速的方式还是欧几里得算法原理:已知m、n两个不全为0的非负整数gcd(m,n)1:如果n=0,返回m作为结果,否则进入22:m对n取余,余数赋值给r3:将n赋值给m,r赋值给n,返回1参考实现defgcd(m,n):'''求最大公约数:paramm::paramn::ret......