书中的题目是求两个数的最大公约数,其实这个问题时当我们学习C语言的时候老师就讲过的算法,和教学中的求素数是一个类型的问题。

我们当时学的方法是 “辗转相除法”,即利用公式: f(x, y) = f(y, x % y),直到 x % y == 0,取x就是两个数的最大公约数。

但是书中说道,乘除运算太浪费时间了,所以,我们可以换一种方法去思考这个问题,乘除不能用,就只能是加减了,所以,书中利用如果一个数能够同时整除x和y,则必能同时整除x-y和y,所以我们定义x和y的最大公约数是f(x,y),那么依据上面的思想,可以得到f(x,y) = f(x-y,y)。

函数声明如下:

int DutTheGreatestCommonDivisor(int, int);

源代码如下:

/**这里的思想是:如果一个数能够同时整除x和y,则必能同时整除x-y和y,所以*我们定义x和y的最大公约数是f(x,y),那么依据上面的思想,可以得到f(x,y) = f(x-y,y)*/
int DutTheGreatestCommonDivisor(int m, int n)
{/*当m小于n时,需要交换两个数字*/if (m < n)return DutTheGreatestCommonDivisor(n, m);/*当n等于0,时,那么返回m就是最大公约数*/if (n == 0)return m;elsereturn DutTheGreatestCommonDivisor(m - n, n);
}

既然说到了最大公约数,那么和它相对应的是最小公倍数,不记得是上几年级的时候,我们就学过一个公式,两个数的最小公倍数计算方法是 : (x * y) / 最大公约数(x, y)。

函数声明如下:

int DutTheLeastCommonMultiple(int, int);

源代码如下:

/**最小公倍数可以利用最大公约数得到,数学推导可以看看这个:*http://baike.baidu.com/view/341375.htm*/
int DutTheLeastCommonMultiple(int x, int y)
{return (x * y) / DutTheGreatestCommonDivisor(x, y);
}

编程之美2.7 最大公约数,最小公倍数相关推荐

  1. 编程之美2.10:寻找数组中的最大值和最小值

    编程之美2.10: 对于一个有N个整数组成的数组,需要比较多少次才能把最大值和最小值找出来呢? 算法的思想是: 分而治之 测试数据:---------------------------------- ...

  2. 编程之美2.1 求二进制中1的个数

    最近一段的时间,一直在看编程之美之类的算法书籍,刚开始看编程之美,感觉到难度太大,有时候也不愿意去翻动这本书,不过,经过一段时间的修炼,我也彻底的喜欢上这本书了, 书中的算法涉及到很多方面,树,链表, ...

  3. 2017“编程之美”终章:AI之战勇者为王

    编者按:8月15日,第六届微软"编程之美"挑战赛在选手的火热比拼中圆满落下帷幕."编程之美"挑战赛是由微软主办,面向高校学生开展的大型编程比赛.自2012年起, ...

  4. Java 并发编程之美:并发编程高级篇之一-chat

    借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...

  5. Java 并发编程之美:并发编程高级篇之一

    借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...

  6. 编程之美:编程判断两个链表是否相交

    1.问题描述 给出两个单向链表的头指针,比如h1.h2,判断两个链表是否相交.编程之美为了简化问题,假设两个链表均不带环. 如下图: 2.分析与解法 解法一:直观法,先判断第一个链表的每个节点是否在第 ...

  7. c语言找出递增子数组的长度,编程之美2.16 数组中最长递增子序列的长度

    改进的方法看的头大了却还是不清楚,哎...搞算法的苦啊,纠结啊. 编程之美这本书里面就有关于这道题的一些解法,求一个一位数组中的最长序列的长度.例如,在序列1,3,2中,最长递增序列是1,3. 这道题 ...

  8. 二叉树中节点的最大的距离(编程之美3.8)

    问题来源:<编程之美>3.8 求二叉树节点的最大距离 如果把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两个节点之间的个数. 写一个程序求一 ...

  9. 编程之美1:那些关于1的个数的经典面试题

    那些关于1的个数的经典面试题 好长时间没有练算法了,笔试题一做,发现非常吃力,所以近日来找来<编程之美>一书来看看练练.为了激励自己多练,楼楼可能会出个专栏什么的,感兴趣的同学我们可以一起 ...

最新文章

  1. php10-e 豪华版,华为畅享 10e 规格参数
  2. 两大顶级AI算法一起开源!Nature、Science齐发Alphafold2相关重磅,双厨狂喜~
  3. 我的python学习笔记
  4. BCH压力测试最终统计
  5. 搜java题的公众号_java搜题公众号
  6. 最佳时间 (DOM编程艺术)
  7. 边缘计算架构_边缘计算架构梳理
  8. 新论文推荐:Auto-Keras:自动搜索深度学习模型的网络架构和超参数
  9. SQL Server 堆heap 非聚集索引 Nonclustered index 行号键查找RID loopup结合执行计划过程详解
  10. 升级到virtualbox-2.1.4
  11. Ubuntu 18.04.1 搭建Java环境和HelloWorld 1
  12. db2 最大分区数_db2 查询表分区数据库
  13. 性能比拼!超详细的Tengine GEMM矩阵乘法汇编教程
  14. zabbix-自定义监控项
  15. python教程视频-私藏已久的7个Python视频教程
  16. tableau学生版注册流程
  17. 2021-2027全球与中国MSMS探针卡市场现状及未来发展趋势
  18. 手把手教你如何使用Unity搭建简易图片服务器
  19. spring.factory
  20. Unity中TextMeshPro显示中文

热门文章

  1. [译] 重写 loadView() 方法使 Swift 视图代码更加简洁
  2. layer.tips定义弹出的宽度
  3. IDEA for Java Web
  4. 电商啥职位最赚钱?投资薪资最高,客服垫底
  5. Linux初学者的感受
  6. 邮件服务的安装及简单应用
  7. listener does not currently know of service requested in connect descriptor
  8. Silve37.Silverlight和ASP.NET相互传参的两种常用方式(QueryString,Cookie)
  9. C语言笔试题--从CSDN转发
  10. 进程与线程 thread (二)——线程概念