算法本质:

第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。则第一步中约掉的若干个2的积与第二步中等数的乘积就是所求的最大公约数。其中所说的“等数”,就是公约数。求“等数”的办法是“更相减损”法。
#include<stdio.h>int main()
{int a, b;int temp;int num=0;int t=0;printf("请输入两个数:");scanf_s("%d %d", &a, &b);//两个数一样的情况下,最大公约数是他本身if (a == b){printf("%d", a);}else{//保证a是比b大的数if (a < b){temp = a;a = b;b = temp;}//当两个数都是偶数的情况下,要先除2直到其中一个数不为偶数while (a % 2 == 0 && b % 2 == 0){a = a / 2;b = b / 2;num++;}//核心算法,大数减去小数,一直到减数与差相等为止while (a != b){t = a - b;if (t > b){a = t;b = b;}else{a = b;b = t;}}/*//上面的另一种写法while (a != b){if(a > b)a -= b else b -= a}*/}if (num != 0){printf("最大公约数为:%d", t * 2 * num);//这里要把两个数都是偶数先约掉的2乘回来}else{printf("最大公约数为:%d", t);}return 0;
}

更相减损法(求最大公约数)相关推荐

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

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

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

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

  3. C语言实现辗转相除法和更相减损法求两数最大公约数,及求最小公倍数的方法

    在学习从C语言过程中,我们会遇到一个题目,求两个整数的最大公约数,那么接下来分别介绍两种方法求最大公约数 1,辗转相除法 辗转相除法, 又名欧几里德算法(Euclidean Algorithm),是求 ...

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

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

  5. 更相减损法求最大公因数

    问题描述 在之前的博客中提到使用辗转相除法求最大公约数的方法,现在介绍另外一种更容易理解的方法--更相减损法 算法思想 Created with Raphaël 2.2.0 开始 确认? 结束 我的操 ...

  6. C语言 用更相减损术求最大公约数,最小公倍数

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

  7. C语言:求最大公约数-更相减损法(循环自定义函数的定义与调用)

    又是王老师的一道练习题: 任务描述 1.任意给定两个正整数:判断它们是否都是偶数.若是,则用2约简:若不是则执行第二步: 2.以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数.继续这 ...

  8. 最大公约数最小公倍数 辗转相除法 辗转相减法(更相减损法) 穷举法

    最大公约数: 1.辗转相除法 2.辗转相减法(更相减损法) 3.穷举法 最小公倍数:两数的乘积除以最大公约数 方法: 1.判断大小,并使大数赋给a,小数赋给b: 2.辗转相除法:在两数相除余数不为0的 ...

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

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

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

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

最新文章

  1. NHibernate和Cuyahoga(二)(翻译):
  2. 未比对上的bam reads 处理
  3. 让底部始终在浏览器底部
  4. s5原生android 5.0,三星Galaxy S5升级Android 5.0:美味棒棒糖
  5. 电机与系统计算机仿真作业,北邮计算机仿真期末大作业.docx
  6. 盘点云原生的5大特征
  7. PSIM软件学习---01初识别PSIM软件
  8. typedef和define的作用域
  9. 网易2016游戏技术岗在线编程题(二)
  10. 【BZOJ3328】PYXFIB 数论+矩阵乘法
  11. OpenCV:概述、结构和内容
  12. Hive复杂数据类型 struct
  13. Kettle使用教程之数据同步
  14. Java中识别二维码并且提高二维码的识别率
  15. 【瑞萨RA4系列】使用TinyMaix识别手写数字
  16. 成都榆熙:怎么解除拼多多商品的推广限制
  17. Nvidia Isaac Sim ROS机器人仿真和AMR开发环境
  18. C++ Programming Basic acknowledge
  19. 渗透测试-安全岗位面试题总结(含答案)
  20. ResNeXt算法详解(resnet提升篇)

热门文章

  1. ad19生成gerber文件,AD10生成gerber文件的详细说明
  2. 解决Ubuntu无法上网的问题
  3. 事件4624是登录成功!?!真的如此吗?
  4. 程序猿养娃的日常(#0)
  5. 从“阅、猫、新、影”四剑合璧,看腾讯的新文创战略
  6. 除了谷歌和百度,你还可以尝试这 8 个专用搜索引擎
  7. dell 2950 安装raid驱动和网卡驱动方法
  8. upc 8377: Playoff(搜索-dfs)
  9. 计算机软件盗版经济问题,计算机软件盗版的法律规制
  10. Matplotlib 绘制股票走势图