C语言 用更相减损术求最大公约数,最小公倍数
更相减损术
更相减损术是出自《九章算术》的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合。
出处
《九章算术》
用途
求最大公约数
作用
适用任何需要求最大公约数的场合
思想
《九章算术》是中国古代的数学专著,其中的“更相减损术”可以用来求两个数的最大公约数,原文是:
可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。
白话文译文:
(如果需要对分数进行约分,那么)可以折半的话,就折半(也就是用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语言 用更相减损术求最大公约数,最小公倍数相关推荐
- 使用更相减损术求最大公约数
package cn.com.test3;import java.util.Scanner;/** 使用更相减损术求最大公约数* 第一步:任意给定两个正整数:判断它们是否都是偶数.若是,则用2约简:若 ...
- 《九章算术》中更相减损术----求最大公约数
更相减损法:也叫更相减损术,是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合. #include<stdio.h> in ...
- 辗转相除法+更相减损法求最大公约数
怎么求两个数的最大公约数呢? 简单的想法就是直接暴力枚举,试出最大公约数 #暴力枚举 #暴力枚举 def GCD(numberA,numberB):gcd=1for i in range(2,max( ...
- 求最大公约数和最小公倍数——辗转相除法(欧几里得算法)、更相减损术、stein算法
辗转相除法-- 辗转相除法求最大公约数的原理: 两个整数其中较小的数 和 两数相除(较大数除较小数)的余数(使用递归)的最大公约数. 辗转相除法求最小公倍数的原理: 两个整数分别除以最大公约数的结果相 ...
- 更相减损法java,五十6、从高中碾转相除法、更相减损术算法谈起
「@Author:Runsen」git ❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化.「---- Runsen」github ❞ 先问大家一个小学问题:「如何求两个整 ...
- 更相减损法java,五十六、从高中碾转相除法、更相减损术算法谈起
「@Author:Runsen」❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化.「---- Runsen」❞ 先问你们一个小学问题:「如何求两个整数的最大公约数?」 曾 ...
- 更相减损术程序设计c语言,更相减损术
本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 更相减损术是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合 ...
- 更相减损术--最大公约数
题目: 更相减损术 ,哈哈,我们今天来看一道稍微复杂一点的题嘛,这是选自codeforce上的一道题,好了,我们一起来看看题意吧: 题目描述是复制的,可能有部分显示不对,我就把题目链接放下面! 题目链 ...
- C++算法:辗转相除法与更相减损术
辗转相除法与更相减损术 1.我们已经学过求最大公因数的知识,你能求出18与30的公因数吗? 2.如果公因数比较大而且根据我们的观察又不能得到一些公因数,我们又应该怎样求它们的最大公因数?比如求8251 ...
最新文章
- Javabean学习纪要
- web前端技术分享:多行文本溢出问题解决方案
- python像素处理_Python 处理图片像素点的实例
- 【译】用 Chrome 开发者工具以及 react 16 版本分析性能
- 口令是计算机软件吗,计算机口令密码以对计算机软件编程进行算法加密为特点,是适用于计算机数据保护和网络通信等广泛用途的密码。下列选项中,不属于常见的弱口令密码的是()。...
- JvavScript中的函数与对象
- 贪吃蛇c加加代码_C语言贪吃蛇代码完整加注释
- 浅谈网银USB key使用原理与安全策略
- SECS\GEM RMS系统简介
- 当你觉得焦虑,烦躁的时候怎么办?
- 擎天哥as3教程系列第四回——设计模式运用自如
- 在12306的程序猿面前,没人敢说委屈
- 【散分】庆祝自己的csdn博客突破100万访问量
- acwing数据结构笔记(一)
- 为什么要写博客?写博客可以给我们带来什么好处?
- TestNG自动化测试框架详解
- 基于jquery上的轻量级《数据模板解析》插件
- 【数智化案例展】浙江电信——数据中台与BI技术助力通信行业驱动高质量数据价值的流通闭环...
- 英雄联盟游戏服务器IP
- 执行 tensorboard --logdir logs遇到的浏览器中输入http://localhost:6006 网址打不开的问题
热门文章
- 经过两天的折腾,我终于写成了我的第一个flutter app程序,差点把我折磨精神崩溃了
- requests+selenium+pyquery+threading实现LOL所有装备图片爬取保存
- 如何查看Android手机CPU类型是armeabi,armeabi-v7a,还是arm64-v8a
- wifi里的android是什么意思啊,androidwifi网关在苹果里是什么?
- 最近面试了不少人,忍不住想聊聊为了面试而学习这件事
- XDOJ1055 - 魔兽争霸考试
- 怎么提高复试分数?这五方面助你一臂之力
- 华清远见-框架阶段技术总结
- ajax传json数据到后端struts,js与struts如何通过aja以json数据形式进行数据传输
- 介绍内存一致性(Memory Consistency)和缓存一致性(Cache Coherence)