欧几里得算法求最大公约数

【知识点】欧几里得算法最大公约数 欧几里得算法最大公约数问题。 阅读详情

Sometimes your whole life boils down to one insane move.


第二次更新欧几里得算法,写下这篇文章是在2019年初,时隔9个月,再次更新数论专题。
发现第一篇博客排版太丑了,重新排了一下,另外改善了代码,更加精简了。


一、欧几里得


  欧几里得,古希腊人,数学家,主要成就:数学巨著《几何原本》、欧几里得算法、完全数。
  在柏拉图学派晚期导师普罗克洛斯(约410~485)的《几何学发展概要》中,就记载着这样一则故事,说的是数学在欧几里得的推动下,逐渐成为人们生活中的一个时髦话题(这与当今社会截然相反),以至于当时亚里山大国王托勒密一世也想赶这一时髦,学点儿几何学。
  虽然这位国王见多识广,但欧氏几何却令他学的很吃力。于是,他问欧几里得“学习几何学有没有什么捷径可走?”,欧几里得笑道:“抱歉,陛下!学习数学和学习一切科学一样,是没有什么捷径可走的。学习数学,人人都得独立思考,就像种庄稼一样,不耕耘是不会有收获的。在这一方面,国王和普通老百姓是一样的。” 从此,“在几何学里,没有专为国王铺设的大道。”这句话成为千古传诵的学习箴言。
  总之呢,任何事情都是这样,哪有这么多得捷径可走,天才往往都是天天积累成才。

二、实现思路


定义2.1:设m和n是两个不全为0的整数,称m与n的公因子中最大的为m与n的最大公因子,或最大公约数(greatest common divisor),记作gcd(m,n)
定义2.2:设m和n是两个非零整数,称a与b最小的公倍数为m与n的最小公倍数(least common multiple),记作lcm(m,n)

欧几里得算法又称辗转相除法

  • s:设两个正整数m,n且m > n ;
  • s1:令r=m%n(%代表取余);
  • s2:若r=0(即n整除m)运算结束,n为结果 ;
  • s3:否则令m=n,n=r并返回s1 ;

三、核心思想


gcd(m,n)=gcd(n,mod(m,n))gcd(m,n)=gcd(n,mod(m,n))gcd(m,n)=gcd(n,mod(m,n))
lcm(m,n)=a/gcd(m,n)∗blcm(m,n) = a/gcd(m,n)*blcm(m,n)=a/gcd(m,n)b

证明:不妨设 m=k1d,n=k2d,k3=m/nm=k_1 d ,n=k_2d , k_3 = m/nm=k1d,n=k2d,k3=m/n (整除)则 r=m−k3n=k1d−k2k3d=(k1−k2k3)dr=m-k_3 n=k_1 d-k_2 k_3 d=(k_1 - k_2 k_3 )dr=mk3n=k1dk2k3d=(k1k2k3)d
故r也是d的倍数,得证gcd(m,n)=gcd(n,mod(m,n))gcd (m,n)=gcd(n,mod(m,n))gcd(m,n)=gcd(n,mod(m,n))

四、优点

一看相比于穷举法,效率也会高很多
更:
拉梅定理:用欧几里得算法计算两个正整数的最大公因子时所需的除法次数不会超过两个数中较小的那个十进制数中数字个数的5倍。 即:cnt<=5d(n)cnt<=5d(n)cnt<=5d(n)
其中nnn为辗转次数,n<mn<mn<md(a)d(a)d(a)表示十进制数中数字个数。
自然而然,时间复杂度为 O(log(n))

五、核心代码

int gcd(int m,int n){
	int r;
	while(n!=0){
		r=m%n;
		m=n;
		n=r;
	}
	return m;
}
// 递归做法
int gcd(int m,int n) {
	return n ? gcd(n,m%n): m; 
}
int lcm(int gcd,int m,int n)
{
	return m/gcd*n;
}

参考来源:人物简介源自百度百科

在CSDN上的第一篇文章,2019加油!

使用 Python 获取实时港股行情数据 在本教程中,你将学习如何通过 Infoway API 获取港股实时行情数据,具体以腾讯控股(0700.HK)和汇丰控股(0005.HK)为例,使用 Python 进行数据请和解析。 阅读详情

相关推荐

在 ABAP 环境中构建自定义健康监控指标:面向 SAP Cloud ALM 与 SAP Focused Run 的完整实践

本文介绍了在ABAP环境中开发自定义健康监控指标的方法。主要内容包括:1)标准监控指标的不足,如无法反映业务应用层面的问题;2)自定义监控架构,通过metric provider定义指标,由采集作业周期性获取数据并存储;3)核心实现技术,包括IF_GSM_API_PROVIDER接口和三个关键方法;4)指标从ABAP推送到SAP Cloud ALM/Focused Run的完整流程;5)开发实践步骤,从业务分析到具体实现。该方案可帮助团队监控业务关键指标,提升系统运维能力。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 227

我的算法不可能这么简单—扩展欧几里得

文章目录

终曲 9240

欧几里得算法最大公约数的高效方法

欧几里得算法,也被称作辗转相除法,是用于计算两个正整数a和b的最大公约数(GCD)的一种方法。该算法的原理十分简单:若b等于0,则最大公约数为a;否则,a和b的最大公约数与b和a除以b的余数的最大公约数相同。这个算法以其简洁高效著称,是数论乃至整个数学领域中一个极其重要的基础算法欧几里得(Euclid)被认为是西方几何学的奠基人。关于他的生平信息非常有限,大部分来自于后世学者的记载和推测。据说欧几里得生活在大约公元前300年的古希腊时期。

weixin_36197669的博客 1035

广义欧几里得除法 最大公因数

广义欧几里得除法计算得Rn即为a,b的最大公因数

Qi2456的博客 7475

使用Euclid算法最大公约数

参考文章    1、《linux c编程一站式学习》的习题5.3.1   2、百度百科Euclid算法:https://baike.baidu.com/item/Euclid%E7%AE%97%E6%B3%95 思想   使用Eucid算法编写两个正整数a和b的最大公约数(GCD, Greatest Common Dvisor)   1、如果a能整除b, 则最大公约数是b   2、否则...

weixin_30251587的博客 1193

欧几里德算法最大公约数

欧几里德算法的思想: 欧几里德算法的思想基于辗转相除法的原理,辗转相除法是欧几里德算法的核心思想,欧几里德算法说白了就是辗转相除法的计算机算法的实现。 辗转相除法的内容: 如果用gcd(a,b)来表示a和b的最大公约数,那么根据辗转相除法的原理,有gcd(a,b)=gcd(b,a mod (b)),其中mod()表示模运算,并且不妨让a>b,这样方便于模运算。 伪代码如下gcd(a, b)

天道酬勤 5601

【学习笔记】 欧几里得算法最大公约数

预备知识 定理1:令a,b,c为整数,其中a ≠ 0,则     (i)  如果a | b和a | c,则a | (b + c);     (ii) 如果a | b,那么对所有整数c都有a | bc;     (iii)如果a | b,b | c,则a | c。 证&n...

怎 样 的博客 8490

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

#欧几里得最大公约数#!/usr/bin/env python#coding -*- utf:8 -*-#iterationdef gcd(a,b):if b==0:return aelse:return gcd(b, remainder(a, b))#此方法仅仅书用于a和b都为正数def gcd_1(a,b):while(b>0):rem = remainder(a,b)a = bb =...

weixin_34731217的博客 2542

最大公约数欧几里得算法

解两个数的最大公约数,经常被用到,但是要做到高效解,最常用的就是欧几里得算法了,也叫做“辗转余法”,公式是这样的:                       gcd(a,b) = gcd(b,a%b) 这个公式来源于数论,至于如何推导得到,网上有大量的教程资料,我就不再赘述了,这里说说它的实现过程。 递归实现代码如下: #include using namespace std

1150

算法归总—欧几里得算法最大公约数

欧几里得算法 欧几里得算法又叫辗转相除法,是一种用来两个数的最大公约数算法。 如图: 注:此图为作者所画,禁止转载。 上图中用66和42为例,详细地介绍了如何这个最大公约数的方法,接下来废话不多说,直接上代码。 #include<bits/stdc++.h> using namespace std; int comment(int m,int n) { int r; r =...

纳支猫的博客 507

Swift算法最大公约数-欧几里得算法

两个非零整数a ,b的最大公约数.本人在最初想到的是最粗暴的方式,其实就是小学老师教的分解因数 func gcd(_ a :Int ,_ b :Int) -> Int { if a == b {//如果两个数相等.则直接返回 return a } let big = max(a, b) let small = min(a, b) ...

weixin_33777877的博客 474

欧几里得算法n个数据的最大公约数

我们知道,欧几里得算法可以简单的看作是——p,q的最大公约数可以这样处理,即p除以q的余数r,则p,q的最大公约数为q与r的最大公约数,然后递归。若规定当一个数p为0的时候, 则最大的公约数为q. 两个数的简单公约数如下算法: int gcd(int p,int q){ if(p==0) return q; int r=p%q; return gcd(q,r)

南瓜灯cc 1058

最大公约数 欧几里得算法(辗转相除法)

1.什么是短除法?例如: 18 和 24 的最大公约数18 和 24 的最大公约数 就为 2 * 3 = 6.

weixin_71838662的博客 550

Euclid 欧几里得算法(c语言递归版)

Euclid欧几里得算法的简单介绍与证明,并附上c语言代码

weixin_44998621的博客 1647

【C++】欧几里德算法快速最大公约数

问题描述:如何快速解2个正整数的最大公约数。 欧几里德(Euclid)算法,也既常说的“辗转相除法”,用于计算2个正整数的最大公约数(Greatest Common Divisor), 计算公式:gcd(a,b) = gcd(b,a mod b); 代码实现如下: #include &lt;iostream&gt; using namespace std; int gcd(int m...

AMG_GT的博客 4183

欧几里得算法最大公约数_小知识:什么是欧几里得算法

问题导入 12 和 18 的最大公约数是多少?最大公约数最大公约数,也称最大公因数、最大公因子,指两个或多个整数共有约数中最大的一个。例如:18 与 12 的最大公约数为 6 。短除法短除法是最大公因数的一种方法:先把每个数的因数找出来,然后再找出公因数,最后在公因数中找出最大公因数。因式分解法在初中数学题中,基本上我们就是采取因式分解或者短除法的形式来最大公约数。但是它们存在的问...

weixin_33019803的博客 2447

欧几里得算法-最大公约(因)数

欧几里得算法 欧几里得算法介绍 欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。 ps:gcd(a,b)表示a和b的最大公因数,是一个数字。 计算过程 给定两个非负整数,让第一个做被除数,第二个做除数,计算得到余数;让第一轮的除数、余数,成为第二轮的被除数、除数,再得到余数…重复直到余数为零,则最后一轮的除数(即倒数第二轮的余数)即为所的两数的最大公因数。

bibohaohao的博客 5685

欧几里得算法(辗转相除法)最大公约数

本文介绍了欧几里得算法(辗转相除法)用于解两个数的最大公约数。该算法在计算机科学和数学领域被广泛应用,因为它快速、简单且高效。此外,文章还介绍了如何使用扩展欧几里得算法解线性方程的整数解,以及如何利用最大公约数来计算最小公倍数。欧几里得算法是一种经典的算法,掌握和了解它对于理解和解决许多数学和计算机科学中的问题非常重要。

qq_41577650的博客 2275

Labview USRP平台下实现OFDM收发信号

Labview USRP平台下实现OFDM收发信号

下一篇: HDU2099 整除的尾数
SinclairWang
博客等级 码龄8年 63粉丝 109原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值