最大公因数,也称最大公约数、最大公因子。

定义:
指两个或多个整数共有约数中最大的一个。

a,b的最大公约数 记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号。
求最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、更相减损法。与最大公约数相对应的概念是最小公倍数,a,b的最小公倍数记为[a,b]。

解法一:最普通的算法(十分硬核)
程序代码:

int main()
{int i, a, b;int max = 1, min;printf("请输入两个数:");scanf("%d%d", &a, &b);if (a > b) //判断输入两个个数的大小{min = b;}else{min = a;}for (i = 2; i <= min; i++){if (a%i == 0 && b%i == 0){max = i;}else{continue;}}printf("最大公约数是%d\n", max);system("pause");return 0;
}

质因数分解法:
把每个数分别分解质因数,再把各数中的全部公有质因数提取出来连乘,所得的积就是这几个数的最大公约数。

例如:求24和60的最大公约数,先分解质因数,得24=2×2×2×3,60=2×2×3×5,24与60的全部公有的质因数是2、2、3,它们的积是2×2×3=12,所以,(24,60)=12。
把几个数先分别分解质因数,再把各数中的全部公有的质因数和独有的质因数提取出来连乘,所得的积就是这几个数的最小公倍数。

但是质因数分解法有一个最大的缺陷:分解质因数只针对合数。
所以此博客不讨论!因为用户输入的时候不一定清楚输入的数是不是合数!

短除法:
短除法求最大公约数,先用这几个数的公约数连续去除,一直除到所有的商互质为止,然后把所有的除数连乘起来,所得的积就是这几个数的最大公约数。

短除法的本质就是质因数分解法。所以此博客不讨论!

解法二:辗转相除法
辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法。
例如:求(319,377):
∵ 319÷377=0(余319)
∴(319,377)=(377,319);
∵ 377÷319=1(余58)
∴(377,319)=(319,58);
∵ 319÷58=5(余29)
∴ (319,58)=(58,29);
∵ 58÷29=2(余0)
∴ (58,29)= 29;
∴ (319,377)=29。

用辗转相除法求几个数的最大公约数,可以先求出其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个数为止。最后所得的那个最大公约数,就是所有这些数的最大公约数。

程序代码:

#include<stdio.h>
#include<stdlib.h>int main()
{int a, b, c;printf("请输入两个数:");scanf("%d%d", &a, &b);while ( c=a % b ){a = b;b = c;}printf("最大公约数是%d\n", b);system("pause");return 0;
}

代码生成图:

解法三:更相减损法
更相减损法:也叫更相减损术,是出自《九章算术》的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合。
《九章算术》是中国古代的数学专著,其中的“更相减损术”可以用来求两个数的最大公约数,即“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。”
翻译成现代语言如下:
第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。
第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。
则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。
其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法。所以更相减损法也叫等值算法。

程序代码:

#include<stdio.h>
#include<stdlib.h>int main(){int a, b;int count = 1;printf("请输入两个数:");scanf("%d%d", &a, &b);while (a % 2 == 0 && b % 2 == 0) {a /= 2;b /= 2;count *= 2;}while (a != b){if (a > b)a -= b;elseb -= a;}printf("最大公约数是%d\n", b*count);system("pause");return 0;
}

C:求两个数的最大公约数详解(硬核算法,辗转相除法,更相减损法)相关推荐

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

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

  2. 最大公约数算法_更相减损法_辗转相除法(即欧几里得算法)

    package algorithm;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr ...

  3. 求最大公约数与最小公倍数 (辗转相除法+更相减损法+Stein算法)

    辗转相除法与更相减损法对比: (1)两者都是求最大公因数的方法,计算上辗转相除法以除法为主,更相减损术以减法为主,计算次数上辗转相除法计算次数相对较少,特别当两个数字大小区别较大时计算次数的区别较明显 ...

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

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

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

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

  6. 辗转相除法和更相减损法-详解——求最大公约数(Java)

    辗转相除法 简介:辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求两个正整数之最大公约数的算法. 原理:两个数的最大公约数等于它们中较小的数和两数之差的最大公约数. 操作 ...

  7. C++ 求最大公约数 更相减损法 欧几里得算法 暴力穷举法

    两个数的最大公约数是指能同时被他们整除的最大正整数. 两个数的最大公约数等于它们中 较小的数 和 两数之差 的最大公约数. 252和105的最大公约数是21(252 = 21 × 12:105 = 2 ...

  8. 求最大公约数和最小公倍数(更相减损法/辗转相除法)

    目录 一.最大公约数 1.1 更相减损法 1.2 辗转相除法 二.最小公倍数 2.1 最小公倍数=两数相乘/最大公约数 2.2 用较小数的倍数除以较大数 一.最大公约数 1.1 更相减损法 原理如下图 ...

  9. 更相减损法(求最大公约数)

    算法本质: 第一步:任意给定两个正整数:判断它们是否都是偶数.若是,则用2约简:若不是则执行第二步.第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数.继续这个操作,直到所得的 ...

最新文章

  1. 自动驾驶技术之——虚拟场景数据库研究
  2. RDB和AOF的持久化配置
  3. C# 重绘tabControl,添加关闭按钮(续)
  4. MDK寄存器地址映射分析
  5. Ajax_ASP.NET 添加 Ajax 和客户端功能_01
  6. java rgb转yuv_【转】总结各种RGB转YUV的转换公式
  7. Docker Compose 项目
  8. nginx优化(经典)
  9. 正则表达式替换和不包含指定字符串
  10. python输出重定向记录
  11. 2014年前端开发者如何提升自己
  12. mac memcached_如何在Mac OS上安装Memcached Server
  13. nbu备份nas文件服务器,NBU网络备份大全之远程配置备份策略
  14. web性能压力测试工具
  15. android常用的混淆规则,关于Android混淆的基本做法
  16. springboot word excel ppt 图片aspose 转换PDF 在线预览
  17. 台式计算机无法访问网络,台式机关机导致局域网内LAN设备无法连接网络
  18. FT1248程序(FT232H,FT220X)
  19. 扩展CKEditor按钮
  20. 通过javax.mail发送邮件(示例gmail、qq)

热门文章

  1. HashMap遍历的方法——总结
  2. [转帖]超能课堂 CPU制作过程
  3. 转:ppt保存慢的解决办法
  4. 《网络安全与渗透测试》课堂笔记---14
  5. python写入文件list,读取list方法
  6. Windows服务器补丁列表及介绍_操作系统打补丁我用WSUS
  7. Python入门初学一、Python简介及发展,带你深入认识Python
  8. amd625和mx250比较_MX250天梯图:入门级独立显卡,别想玩吃鸡游戏
  9. 数据结构与算法之美--1.时间复杂度分析
  10. java tlv生成,TLV格式数据JAVA编解码