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

出处
《九章算术》
用途
求最大公约数
作用
适用任何需要求最大公约数的场合

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

白话文译文:
(如果需要对分数进行约分,那么)可以折半的话,就折半(也就是用2来约分)。如果不可以折半的话,那么就比较分母和分子的大小,用大数减去小数,互相减来减去,一直到减数与差相等为止,用这个相等的数字来约分。

使用步骤
第一步:任意给定两个正整数;判断它们是否都是偶数。
若是,则用2约简;见例2
若不是则执行第二步。见例1
第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。
则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。
其中所说的“等数”,就是最大公约数。求“等数”的办法就是“更相减损”法。
简述为:
有两整数a和b:

① 若a>b,则a=a-b

② 若a<b,则b=b-a

③ 若a=b,则a(或b)即为两数的最大公约数

④ 若a≠b,则再回去执行①

例如求27和15的最大公约数过程为:

27-15=12( 15>12 ) 15-12=3( 12>3 )

12-3=9( 9>3 ) 9-3=6( 6>3 )

6-3=3( 3==3 ),多次重复辗转相减,(重复操作用循环) 若a=b,则a(或b)即为两数的最大公约数。
先有个大概的了解,再结合代码,来细细体会。

#include<stdio.h>
main()
{   int a,b,num1,num2;printf("请输入这两个数:");scanf("%d %d",&a,&b);num1=a,num2=b;//在判断之前先把a,b存放在num1,num2里,求最小公倍数 // printf("a、b的最小公倍数为:%d",num1*num2/a);错在哪儿?错在最小公倍数的算法不知道 while(a!=b)/* a, b不相等,大数减小数,直到相等为止。*/ {if(a>b)a-=b;elseb-=a;}//a==b结束循环,根据更相减损术,若a==b,则a(或b)即为两数的最大公约数。printf("a、b的最大公约数为:%d\n",a);printf("a、b的最小公倍数为:%d",num1*num2/a);//最小公倍数=两整数的乘积÷最大公约数
}

知识小补丁:
求最小公倍数算法:
最小公倍数=两整数的乘积÷最大公约数

求最大公约数算法:
(1)辗转相除法

#include <stdio.h>
//程序分析:利用辗除法。
int main()
{   int a,b,num1,num2,temp;printf("please input two number:\n");scanf("%d%d",&num1,&num2);if(num1<num2)//比较大小,大做分母,小做分子{   temp = num1;//这是两个数比大小的经典算法num1 = num2;num2 = temp;}a = num1;//小者给ab = num2;//大者给bwhile(b!=0)/*利用辗除法,直到b为0为止*/{   temp = a%b;//这是重复取余的操作a=b;b=temp;}printf("公约数:%d\n",a);printf("公倍数:%d\n",num1*num2/a);
}

利用辗除法求最大公约数和最小公倍数:https://blog.csdn.net/YJG7D314/article/details/86760128

(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

例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,即1322=52。

C语言 用更相减损术求最大公约数,最小公倍数相关推荐

  1. 使用更相减损术求最大公约数

    package cn.com.test3;import java.util.Scanner;/** 使用更相减损术求最大公约数* 第一步:任意给定两个正整数:判断它们是否都是偶数.若是,则用2约简:若 ...

  2. 《九章算术》中更相减损术----求最大公约数

    更相减损法:也叫更相减损术,是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合. #include<stdio.h> in ...

  3. 辗转相除法+更相减损法求最大公约数

    怎么求两个数的最大公约数呢? 简单的想法就是直接暴力枚举,试出最大公约数 #暴力枚举 #暴力枚举 def GCD(numberA,numberB):gcd=1for i in range(2,max( ...

  4. 求最大公约数和最小公倍数——辗转相除法(欧几里得算法)、更相减损术、stein算法

    辗转相除法-- 辗转相除法求最大公约数的原理: 两个整数其中较小的数 和 两数相除(较大数除较小数)的余数(使用递归)的最大公约数. 辗转相除法求最小公倍数的原理: 两个整数分别除以最大公约数的结果相 ...

  5. 更相减损法java,五十6、从高中碾转相除法、更相减损术算法谈起

    「@Author:Runsen」git ❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化.「---- Runsen」github ❞ 先问大家一个小学问题:「如何求两个整 ...

  6. 更相减损法java,五十六、从高中碾转相除法、更相减损术算法谈起

    「@Author:Runsen」❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化.「---- Runsen」❞ 先问你们一个小学问题:「如何求两个整数的最大公约数?」 曾 ...

  7. 更相减损术程序设计c语言,更相减损术

    本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 更相减损术是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合 ...

  8. 更相减损术--最大公约数

    题目: 更相减损术 ,哈哈,我们今天来看一道稍微复杂一点的题嘛,这是选自codeforce上的一道题,好了,我们一起来看看题意吧: 题目描述是复制的,可能有部分显示不对,我就把题目链接放下面! 题目链 ...

  9. C++算法:辗转相除法与更相减损术

    辗转相除法与更相减损术 1.我们已经学过求最大公因数的知识,你能求出18与30的公因数吗? 2.如果公因数比较大而且根据我们的观察又不能得到一些公因数,我们又应该怎样求它们的最大公因数?比如求8251 ...

最新文章

  1. Javabean学习纪要
  2. web前端技术分享:多行文本溢出问题解决方案
  3. python像素处理_Python 处理图片像素点的实例
  4. 【译】用 Chrome 开发者工具以及 react 16 版本分析性能
  5. 口令是计算机软件吗,计算机口令密码以对计算机软件编程进行算法加密为特点,是适用于计算机数据保护和网络通信等广泛用途的密码。下列选项中,不属于常见的弱口令密码的是()。...
  6. JvavScript中的函数与对象
  7. 贪吃蛇c加加代码_C语言贪吃蛇代码完整加注释
  8. 浅谈网银USB key使用原理与安全策略
  9. SECS\GEM RMS系统简介
  10. 当你觉得焦虑,烦躁的时候怎么办?
  11. 擎天哥as3教程系列第四回——设计模式运用自如
  12. 在12306的程序猿面前,没人敢说委屈
  13. 【散分】庆祝自己的csdn博客突破100万访问量
  14. acwing数据结构笔记(一)
  15. 为什么要写博客?写博客可以给我们带来什么好处?
  16. TestNG自动化测试框架详解
  17. 基于jquery上的轻量级《数据模板解析》插件
  18. 【数智化案例展】浙江电信——数据中台与BI技术助力通信行业驱动高质量数据价值的流通闭环...
  19. 英雄联盟游戏服务器IP
  20. 执行 tensorboard --logdir logs遇到的浏览器中输入http://localhost:6006 网址打不开的问题

热门文章

  1. 经过两天的折腾,我终于写成了我的第一个flutter app程序,差点把我折磨精神崩溃了
  2. requests+selenium+pyquery+threading实现LOL所有装备图片爬取保存
  3. 如何查看Android手机CPU类型是armeabi,armeabi-v7a,还是arm64-v8a
  4. wifi里的android是什么意思啊,androidwifi网关在苹果里是什么?
  5. 最近面试了不少人,忍不住想聊聊为了面试而学习这件事
  6. XDOJ1055 - 魔兽争霸考试
  7. 怎么提高复试分数?这五方面助你一臂之力
  8. 华清远见-框架阶段技术总结
  9. ajax传json数据到后端struts,js与struts如何通过aja以json数据形式进行数据传输
  10. 介绍内存一致性(Memory Consistency)和缓存一致性(Cache Coherence)