求最大公约数有两种方法:

  • 1.暴力枚举,从两个数中较小的那个数开始,一个一个从大到小枚举,最先枚举到的,就是最大公约数,此方法很简单,但是速度较慢。

  • 2.欧几里德算法(也叫辗转相除法),公式:gcd(a,b) = gcd(b,a mod b)证明过程如下:

辗转相除法的证明方法(摘自百度):

证法一

   a可以表示成a = kb + r(a,b,k,r皆为正整数,且r<b),则r = a mod b假设d是a,b的一个公约数,记作d|a,d|b,即a和b都可以被d整除。而r = a - kb,两边同时除以d,r/d=a/d-kb/d=m,由等式右边可知m为整数,因此d|r因此d也是b,a mod b的公约数假设d是b,a mod b的公约数, 则d|b,d|(a-k*b),k是一个整数。进而d|a.因此d也是a,b的公约数因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证。

证法二

   假设c = gcd(a,b),则存在m,n,使a = mc, b = nc;令r = a mod b,即存在k,使r = a-kb = mc - knc = (m-kn)c;故gcd(b,a mod b) = gdc(b,r) = gcd(nc,(m-kn)c) = gcd(n,m-kn)*c;假设d = gcd(n,m-kn), 则存在x,y, 使n = xd, m-kn = yd; 故m = yd+kn = yd+kxd =     (y+kx)d;故有a = mc = (y+kx)dc, b = nc = xdc; 可得 gcd(a,b) = gcd((y+kx)dc,xdc) = dc;由于gcd(a,b) = c, 故d = 1;即gcd(n,m-kn) = 1, 故可得gcd(b,a mod b) = c;可得证gcd(a,b) = gcd(b,a mod b).

C++代码实现gcd(a,b) = gcd(b,a mod b)

inline int GCD(int a,int b){   //inline可以优化函数,减小内存
int n=a>b?a:b;  //三元运算符,结构:`条件?语句1:语句二`。等价于 if(a>b) n=a; else n=b;
int m=b>a?a:b;
if(n%m==0) return m;  //如果n%m结果为0,输出m
return GCD(m,n%m);  //余数不为0,n替换为m;m替换为n%m;
}

知道了gcd(a,b) = gcd(b,a mod b)公式怎么实现,就可以写出代码了。

code:

#include<cstdio>  //scanf和printf的头文件
using namespace std;
int a,b;
inline int GCD(int a,int b){  //上面有了,不解释int n=a>b?a:b;int m=b>a?a:b;if(n%m==0) return m;return GCD(m,n%m);
}
int main(){scanf("%d%d",&a,&b);  //输入a,bprintf("%d",GCD(a,b));  //输出答案
}

还有有疑问可以在此处寻找更多优秀文章或者在评论中提出哦~

C++辗转相除法详解相关推荐

  1. 辗转相除法详解(C语言实现)

    辗转相除法 定义 基本原理 原理 证明 算法实现 思想 C语言实现 定义 辗转相除法,被称为欧几里得(Euclidean)算法,是求最大公约数的算法. 基本原理 原理 两个正整数a和b(a > ...

  2. 密码学:RSA加密算法详解

    概述 本文旨在说明RSA加密算法的原理及实现,而其相关的数学部分的证明则不是本文内容. 版权说明 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:Q-WHai 发表日期: ...

  3. md5与des算法有何不同_Python算法详解:为什么说算法是程序的灵魂?

    算法是程序的灵魂,只有掌握了算法,才能轻松地驾驭程序开发.软件开发工作不是按部就班,而是选择一种最合理的算法去实现项目功能.算法能够引导开发者在面对一个项目功能时用什么思路去实现,有了这个思路后,编程 ...

  4. php怎么求最小公倍数,C++_详解C语言求两个数的最大公约数及最小公倍数的方法,求两个正整数的最大公约数nbs - phpStudy...

    详解C语言求两个数的最大公约数及最小公倍数的方法 求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法.通式分别为 f(x, y) = f(y, x%y) ...

  5. 【中国剩余定理】互素与不互素的情况详解

    侵权则删(这个现在更多是作为笔记存在,因为写的时间有点久了,不知道参考了多少篇资料汇总的,发现的话会补上的,也非常感谢在网上分享知识的人) 这篇文章很少涉及特别基础的数学公式,但是相信能够帮助你理解, ...

  6. C语言求最大公约数三种方法详解

    C语言求最大公约数三种方法详解 题目要求 常用写法(穷举法) 辗转相减法 辗转相除法 main函数 整体代码 题目要求 运行最大公约数的常用算法,并进行程序的调式与测试. 常用写法(穷举法) 从两个数 ...

  7. C语言:最大公约数详解

    C语言:最大公约数详解 Hello!小伙伴们大家好,几天不见了,今天给大家分享一下C语言中求最大公约数的三种方法.在开始分享前,让我们先来看看什么是最大公约数:最大公约数,也称最大公约数.最大公因子, ...

  8. 【算法学习】欧几里得算法详解(包括扩展、同余方程)

    欧几里得算法详解(包括扩展.同余方程) 1.普通欧几里得算法(求最大公约数) 2.扩展欧几里得算法(求解a*x+b*y=c中(x,y)) 3.同余方程 1.普通欧几里得算法(求最大公约数) 欧几里得算 ...

  9. 乘法逆元(inverse element)及四大相关求法详解(含证明)

    文章目录 乘法逆元及四大相关求法详解(含证明) 开胃菜 1. 定义及理解 1.1 乘法逆元的定义 1.1.1 极简定义 1.1.2 详细定义 1.1.3 理解及其相关证明<br> 2. 逆 ...

最新文章

  1. java将读到的换行符存储到数据表中_Java学习之路013天
  2. 浅谈三维点云中的几何语义
  3. 目标检测--Beyond Skip Connections: Top-Down Modulation for Object Detection
  4. Torch not compiled with CUDA enabled
  5. 设计模式(面向对象)设计的七大原则
  6. java实用教程——组件及事件处理——布局管理(五种)
  7. PS(留学动机)的妙用——扭转你的劣势
  8. linux 路由协议,路由协议之RIP协议
  9. 定时重启软件_办公电脑怎样设置定时重启?依靠这款工具即可轻松实现
  10. cfile清空文件内容_体育老师学编程(第11天)python常用的文件读写操作
  11. 微软开放技术发布开源 Jenkins 插件以将 Windows Azure Blob 服务用的开作存储库
  12. 机器学习中的特征工程总结
  13. GPS坐标与UTM坐标的转换
  14. 关于地理数据收集与处理的基本工具推荐(3)--最新30m的DEM与DSM数据免费下载
  15. 天翼云服务器搭建网站必须要知道的血泪史!
  16. 日式卡通渲染的效果的unity实现
  17. 教你一键采集天猫商品主图视频的方法及步骤
  18. 转-SIP穿越NAT SIP穿越防火墙
  19. Dojo官方教程:Charting
  20. linux7.5开放端口,Centos/linux开放端口

热门文章

  1. ipdb 调试 Python
  2. UltraEdit 10.20c 下载及注册
  3. php做的中秋博饼游戏之绘制骰子图案功能示例
  4. Pytorch之view,reshape,resize函数
  5. PetiteVue - Vue 作者尤雨溪新作品,小巧精简版的 Vue
  6. X299+10代10900XOpenCore引导安装macOS Catalina10.15.5
  7. 图片大全 | 常用电子接口大全
  8. Tensorflow迁移学习实现猫狗大战
  9. Sqlserver数据库分离失败 数据库被误删找不到文件解决方案
  10. 如何养成最高效的工作方法