辗转相除法(欧几里得算法)求解最大公约数、最小公倍数

通常来说,求解两个数的最大公约数和最小公倍数是常见的算法问题,我们正常人最先想到的肯定是穷举法,通过while循环或者for循环,不断改变循环数,辗转取余判断是否为0。C++代码如下:

// An highlighted block
#include<iostream>
using namespace std;
//求解最大公倍数
int gcd1(int a, int b)
{int maxfac = b;while (maxfac>=1){if (a%maxfac == 0 && b%maxfac == 0)return maxfac;elsemaxfac--;}return 1;
}
//求解最小公约数
int gcd2(int a, int b)
{int minmul = a;while (minmul <= a*b){if (minmul%a == 0 && minmul%b == 0)return minmul;elseminmul++;}return a*b;
}int main()
{int a, b;cin >> a >> b;int temp;//设置a为两个数中较大的数,b设置为较小的数if(a<b){temp = a;a = b;b = temp;}cout << "最大公约数: " << gcd1(a, b) << endl;cout << "最小公倍数: " << gcd2(a, b) << endl;system("pause");return 0;
}

但是在实际的算法题中,这种算法时间复杂度较高,如果给定的数值较大,计算指定超时,而且体现不出算法的技巧性。所以衍生出了稍微有一点技巧的辗转相除法求解最大公约数,以及通过最大公约数求解最小公倍数。C++代码如下:

#include<iostream>
using namespace std;int gcd(int a, int b)
{int temp;while (b){temp = a%b;a = b;b = temp;}return a;
}int main()
{int a, b;cin >> a >> b;int temp;if(a<b){temp = a;a = b;b = temp;}//设置a为两个数中较大的数,b设置为较小的数cout << "最大公约数: " << gcd(a, b) << endl;cout << "最小公倍数: " << (a*b) / gcd(a, b) << endl;system("pause");return 0;
}

首先降低了求解最大公约数的时间复杂度,同时求解最小公倍数的过程也可以通过最大公约数一步到位,两个过程合并为一个过程。
算法问题最近持续更新,大家可以关注我的CSDN博客。

辗转相除法(欧几里得算法)求解最大公约数、最小公倍数相关推荐

  1. 辗转相除法(欧几里得算法)求 最大公约数与最小公倍数+推论与证明。

    首先我们规定:0不参与公约数和公倍数的讨论 先来讨论最大公约数: 最大公约数求法:两个数的所有公共质数相乘. 考虑三个问题. 为什么是公共的:公共代表这个数可以被两个数都整除 为什么是质数:合数一定能 ...

  2. 数论 - 约数基础 【 试除法求所有约数 + 约数个数和约数之和 + 欧几里得算法-求解最大公约数 】

    数论-约数基础 1.约数定义 约数,又称因数.整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a.a称为b的倍数,b称为a的约数.在大学之前,"约数 ...

  3. 离散数学/初等数论:用“质因子分解法”和“欧几里得算法”求最大公约数gcd;“质因子分解法”和“最简算法”求最小公倍数lcm;以及对“意义”的一些看法。

    需要在开头提前说明,本篇文章仅仅用于在学习初等数论或者离散数学时候对算术基本定理的理解,实际应用的时候把结论告诉大家,想求最大公约数就用欧几里得算法是最简单的,在本篇不再赘述,有机会我会在其他文章中说 ...

  4. 欧几里得算法求最大公约数、最大公倍数

    欧几里得算法求最大公约数.最大公倍数 最大公约数(Greatest Common Divisor, GCD),是指2个或N个整数共有约数中最大的一个.a,b的最大公约数记为(a, b).相对应的是最小 ...

  5. 欧几里得算法求最大公约数python,算法:欧几里得求最大公约数(python版)

    #欧几里得求最大公约数 #!/usr/bin/env python #coding -*- utf:8 -*- #iteration def gcd(a,b): if b==0: return a e ...

  6. 欧几里得算法求最大公约数之惊掉下巴的代码简化(纯C语言)

    欧几里得算法求最大公约数也叫辗转相除法. 证明 有两个数a,b,且a = kb + r(a,b,k,r皆为正整数,且r<b) 假设d为a,b的一个公约数 而r = a - kb,两边同时除以d, ...

  7. 用欧几里得算法求最大公约数_欧几里得算法:GCD(最大公约数),用C ++和Java示例解释...

    用欧几里得算法求最大公约数 For this topic you must know about Greatest Common Divisor (GCD) and the MOD operation ...

  8. C语言:欧几里得算法求最大公约数

    文章目录 欧几里得算法 C语言:欧几里得算法求最大公约数 C语言:穷举法 欧几里得算法 举个例子说明欧几里得算法. 如图所示,用正方形地板砖,把这一块粉红色空地(长为xxx,宽为yyy,x>yx ...

  9. 如何利用扩展欧几里得算法求解不定方程_欧几里德算法、拓展欧几里德、中国剩余定理...

    01.欧几里德算法(Euclidean algorithm)(辗转相除法) 欧几里德算法又称辗转相除法,主要是用于计算两个整数a,b的最大公约数. 简单点说一下算法原理:两个整数的最大公约数等于其中小 ...

最新文章

  1. 几种xml读取方法比较
  2. iOS 不要使用tag传递TableViewCell的indexPath值
  3. css不常用,不常用的 CSS
  4. 13-StringTable
  5. HDU - 7028 Decomposition 无向完全图构造欧拉回路
  6. workbench透明设置_ansys workbench模型能透明显示吗?非常感谢
  7. 《CSS基础教程》 读书笔记二
  8. c html循环ienumerable,C#方法返回IEnumerable实现用foreach遍历
  9. 开关电源仿真与设计基于spice 第2版 中译本_亚成微招聘模拟IC设计师、FAE工程师、系统测试工程师...
  10. 微信小程序图片四个API用法
  11. Django Book 中对于MVC的阐释
  12. 国产数据库-达梦数据库
  13. 深度| 百度副总裁王海峰:百度在NLP领域都做了什么?
  14. 黑客教父郭盛华:提升家庭WiFi的10个方法
  15. 【python中级】linux系统获得计算机网卡流量
  16. 算法竞赛---day1(等差素数列)
  17. vue使用百度地图获取位置信息
  18. php 禁止抓取,服务器反爬虫攻略:Apache/Nginx/PHP禁止某些User Agent抓取网站
  19. 网络安全系列-二十九: 读《透视APT 赛博空间的高级威胁》笔记
  20. 解决电脑问题方案之一

热门文章

  1. markdown编辑器语法——字体、字号与颜色
  2. 【PL/SQL】学习笔记 (1)一个简单的PL/SQL程序
  3. 微信小程序实现文字跑马灯
  4. solution: stuch on 'setting up your MAC'
  5. 第二章 函数式数据结构
  6. FineReport:任意时刻只允许在一个客户端登陆账号的插件
  7. js exec方法详解
  8. (收集)vim72 .vimrc的一个样本
  9. Flutter RotatedBox 旋转组件
  10. 四平方和(程序设计)