思路分析:

(1)求差判定法:
   如果两个数相差不大,可以用大数减去小数,所得的差与小数的最大公约数就是原来两个数的最大公约数.例如:求78和60的最大公约数.78-60=18,18和60的最大公约数是6,所以78和60的最大公约数是6.
   如果两个数相差较大,可以用大数减去小数的若干倍,一直减到差比小数小为止,差和小数的最大公约数就是原来两数的最大公约数.
   例如:求92和16的最大公约数.92-16=76,76-16=60,60-16=44,44-16=28,28-16=12,12和16的最大公约数是4,
  所以92和16的最大公约数就是4.
(2)辗转相除法:
  当两个数都较大时,采用辗转相除法比较方便.其方法是:
    以小数除大数,如果能整除,那么小数就是所求的最大公约数.否则就用余数来除刚才的除数;再用这新除法的余数去除刚才的余数.
    依此类推,直到一个除法能够整除,这时作为除数的数就是所求的最大公约数.
  例如:求4453和5767的最大公约数时,可作如下除法.
      5767÷4453=1余1314
      4453÷1314=3余511
      1314÷511=2余292
      511÷292=1余219
      292÷219=1余73
      219÷73=3
  于是得知,5767和4453的最大公约数是73.
    核心思路就是:算法的核心思想就是大数除小数,如果得出来的数有余数,把这个余数做为下一次的除数,上一次的除数做为被除数,直到最后相除的余数为0,则除数即为最大公约数。

/**
* 采用递归法实现求两个数的最大公约数
*/
public static int GCM(int a, int b) {
int max, min;
max = a > b ? a : b;
min = a < b ? a : b; if (max % min == 0)
return min;
else
return GCM(min, max % min);
} /**
* 采用非递归方法实现求两个数的最大公约数
*/
public static int GCM1(int a, int b) {
int max, min;
int temp;
max = a > b ? a : b;
min = a < b ? a : b; if (max % min == 0)
return min;
while (max % min != 0) {
temp = max % min;
max = min;
min =temp;
}
return min;
}

-------------------------------------------------------------------------------------------------
  求两个数的最小公倍数 LCM (lowest common multiple)
思路:求两个整数的最小公倍数就是求:这两个数的乘积除以这两个整数的最大公约数,你说是不是这个理?
(最小公倍数=两数的乘积/最大公约数)
*
*/

求两个整数的最大公约数GCM的更多相关文章

  1. c 求两个整数的最大公约数和最小公倍数

    //求最大公约数是用辗转相除法,最小公倍数是根据公式 m,n 的 最大公约数* m,n最小公倍数 = m*n 来计算 #include<stdio.h> //将两个整数升序排列 void ...

  2. 【C语言】写一个函数,并调用该函数求两个整数的最大公约数和最小公倍数

    程序分析: 在数学中,两个数的最小公倍数=两个数的乘积/两数的最大公约数. 求两个数的最大公约数,运用辗转相除法:已知两个整数M和N,假定M>N,则求M%N. 如果余数为0,则N即为所求:如果余 ...

  3. java 利用辗除法求两个整数的最大公约数和最小公倍数

    题目:输入两个正整数m和n,求其最大公约数和最小公倍数. 程序分析:利用辗除法. package Studytest; import java.util.Scanner; public class P ...

  4. 用二进制方法求两个整数的最大公约数(GCD)

    二进制GCD算法基本原理是: 先用移位的方式对两个数除2,直到两个数不同时为偶数.然后将剩下的偶数(如果有的话)做同样的操作,这样做的原因是如果u和v中u为偶数,v为奇数,则有gcd(u,v)=gcd ...

  5. 《Advanced Bash-scripting Guide》学习(十九):两个整数的最大公约数

    本文所选的例子来自于<Advanced Bash-scripting Gudie>一书,译者 杨春敏 黄毅 #!/bin/bash #求两个整数的最大公约数 E_BADARGS= #如果参 ...

  6. php取两个整数的最大公约数算法大全

    php计算两个整数的最大公约数常用算法 <?php//计时,返回秒function microtime_float (){ list( $usec , $sec ) = explode ( &q ...

  7. 《剑指offer》写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

    弱菜刷题还是刷中文题好了,没必要和英文过不去,现在的重点是基本代码能力的恢复. [题目] 剑指offer 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. [思路] 直觉 ...

  8. 算法 - 求两个自然数的最大公约数(C++)

    //************************************************************************************************** ...

  9. C++程序设计实践指导1.5求两个整数集合并集改写要求实现

    改写要求1:改写为单链表结构可以对任意长度整数集合求并集 #include <cstdlib> #include <iostream> using namespace std; ...

随机推荐

  1. PHP数组转为树的算法

    一.使用引用 function listToTree($list, $pk = 'id', $pid = 'pid', $child = '_child', $root = 0) { $tree = ...

  2. Spark本地运行成功,集群运行空指针异。

    一个很久之前写的Spark作业,当时运行在local模式下.最近又开始处理这方面数据了,就打包提交集群,结果频频空指针.最开始以为是程序中有null调用了,经过排除发现是继承App导致集群运行时候无法 ...

  3. SQL的各种连接Join详解

    SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段. 最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN).SQL LEFT JOIN.SQL  ...

  4. yii2 下拉菜单

    model public static function getCatlist(){ $cat = ['0' => '暂无分类']; $res = self::find()->asArra ...

  5. Ros使用Arduino 2 使用rosserial创建一个publisher

    1 启动arduino 将arduino开发板连接到电脑的usb口,在arduino IDE中进行设置. 选择Tools->Board,选择你所使用的arduino开发板的类型,所使用的ardu ...

  6. python:利用smtplib模块发送邮件

    自动化测试中,测试报告一般都需要发送给相关的人员,比较有效的一个方法是每次执行完测试用例后,将测试报告(HTML.截图.附件)通过邮件方式发送. 参考代码:send_mail.py 一.python对 ...

  7. jmeter(十九)HTTP属性管理器

    jmeter是一个开源灵活的接口和性能测试工具,当然也能利用jmeter进行接口自动化测试.在我们利用它进行测试过程中,最常用的sampler大概就是Http Request, 使用这个sampler ...

  8. arp绑定IP

    0.拓扑图 1.  现象:for i in `seq 1 20` ;do  sleep 1|telnet www.baidu.com 80 ;done  速度有很明显的卡顿 2.操作:用tcpdump ...

  9. Linux系统安装IDS(snort工具)

    第一步:预装daq所需程序 snort使用数据采集器(daq)监听防火墙数据包队列,所以按照daq.需预装的程序有:flex.bison.libcap. sudo apt-get install fl ...

  10. 基于uFUN开发板的心率计(二)动态阈值算法获取心率值

    前言 上一篇文章:基于uFUN开发板的心率计(一)DMA方式获取传感器数据,介绍了如何获取PulseSensor心率传感器的电压值,并对硬件电路进行了计算分析.心率计,重要的是要获取到心率值,本篇文章 ...