辗转相除法(欧几里得算法)

如何理解辗转相除法欧几里得算法)的原理 欧几里得算法又称辗转相除法,用于计算两个非负整数a,b的最大公约数。以上原理成立,于是求两个数的最大公约数时,我们可以根据这个逻辑,进行逐次用前一个的除数除以余数,直到余数为0为止。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数。设两数a、b(b<a)的最大公约数为c,c=gcd(a,b),且存在m,n,使得。那么a和b的最大公约数将会是nc,即b,与原设定相矛盾,令r为a除以b的余数,r=a mod b,即存在k使得。那么377和319的最大公约数为29。 阅读详情

辗转相除法,又叫欧几里德(Euclidean)算法, 是求最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。

计算公式gcd(a,b) = gcd(b,a mod b)。

算法简介:

欧几里德算法是用来求两个正整数最大公约数的算法。是由古希腊数学家欧几里德在其著作《The Elements》中最早描述了这种算法,所以被命名为欧几里德算法。
扩展欧几里德算法可用于RSA加密等领域。
假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里德算法,是这样进行的:

1997 / 615 = 3 (余 152)
615 / 152 = 4(余7)
152 / 7 = 21(余5)
7 / 5 = 1 (余2)
5 / 2 = 2 (余1)
2 / 1 = 2 (余0)
至此,最大公约数为1

以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。

程序设计:

辗转相除法是利用以下性质来确定两个正整数 a 和 b 的最大公因子的:
⒈ 若 r 是 a ÷ b 的余数,且r不为0, 则
gcd(a,b) = gcd(b,r)
⒉ a 和其倍数之最大公因子为 a。
另一种写法是:
⒈ 令r为a/b所得余数(0≤r<b)
若 r= 0,算法结束;b 即为答案。
⒉ 互换:置 a←b,b←r,并返回第一步。

算法版本:

C语言:
/*
欧几里德算法:辗转求余
 原理: gcd(a,b)=gcd(b,a mod b)
 当b为0时,两数的最大公约数即为a
 getchar()会接受前一个scanf的回车符
*/
#include<stdio.h>
unsigned int Gcd(unsigned int M,unsigned int N)
{
    unsigned int Rem;
    while(N > 0)
    {
        Rem = M % N;
        M = N;
        N = Rem;
     }
     return M;
 }
 int main(void)
{
    int a,b;
    scanf("%d %d",&a,&b);
    printf("the greatest common factor of %d and %d is ",a,b);
    printf("%d\n",Gcd(a,b));
    return 0;
 }
C++:
#include <algorithm> // std::swap for c++ before c++11
#include <utility> // std::swap for c++ since c++11
int gcd(int a,int b)
{
    if (a < b)
        std::swap(a, b);
    return b == 0 ? a : gcd(b, a % b);
}
Java:
 int gcd(int m,int n)
{   if(n == 0){
        return m; 
    }
    int r = m%n;
    return gcd(n,r)
}
Python:
def gcd(a, b):
    while a != 0:
        a, b = b % a, a

    return b

模P乘法逆元:

对于整数a、p,如果存在整数b,满足ab mod p =1,则说,b是a的模p乘法逆元。

定理:a存在模p的乘法逆元的充要条件是gcd(a,p) = 1
证明:
首先证明充分性

如果gcd(a,p) = 1,根据欧拉定理,aφ(p) ≡ 1 mod p,因此
显然aφ(p)-1 mod p是a的模p乘法逆元。

再证明必要性

假设存在a模p的乘法逆元为b
ab ≡ 1 mod p
则ab = kp +1 ,所以1 = ab - kp
因为gcd(a,p) = d
所以d | 1

所以d只能为1

欧几里得算法辗转相除法 本博客主要讲了欧几里得算法,出示了几道例题。 阅读详情

相关推荐

辗转相除法(欧几里得算法)深度解析

辗转相除法(Euclidean Algorithm)是求解两个正整数最大公约数(GCD, Greatest Common Divisor)的经典算法。它以简洁的数学原理和高效的计算过程,成为数论算法的基石之一,广泛应用于密码学、代数运算、计算机科学等领域。本文我将从数学原理、算法实现、复杂度分析、应用场景等多个维度,深入解析这一经典算法,结合代码示例与数学证明,带你全面掌握辗转相除法的核心思想。

2645

详解“辗转相除法”(如何求最大公约数)

辗转相除法是用于求两个非负整数的最大公约数的高效方法这种方法可以不用去计算两个数谁大谁小,这样能够提高运算效率具体还是看我上面的手绘图加深一下理解。

C_Small_Cai的博客 1万+

ROC-RK3588S-PC 刷机 安装Android系统

rk3588刷机,装系统

Wjz_www的博客 4746

利用辗转相除法——求最大公约数(详解)

辗转相除法 求最大公约数: 给定两个数,求这两个数的最大公约数 欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。 例如:假如需要求 100 和18 两个正整数的最大公约数,用欧几里得算法,是这样进行的: 100 / 18 = 5 (余 10) 18 / 10= 1(余8) 10 / 8 = 1(余2) 8 / 2 = 4 (余0) 至此,最大公约数为2 以除数和余数反复做除法运算,当余数为 0

H48530的博客 8万+

辗转相除法——求最大公约数(易懂详解)

辗转相除法——求最大公约数(易懂详解)

weixin_64188098的博客 4万+

辗转相除法的原理

辗转相除法是求最大公约数的一种方法。它的具体做法是:用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。这个和更相减损术有着异曲同工之处。 原理: 首先介绍下更相减损术的原理,假设有两个数161和63,我们要求这两个数的最大公因数,不妨假定这个最大公因数为m...

Ran 10万+

python辗转相除法算法_欧几里得算法/欧几里得扩展算法-python

说在开头。出于对欧几里得的尊重,先简单介(cou)(ge)(zi)(shu).。欧几里得,古希腊人,数学家。他活跃于托勒密一世时期的亚历山大里亚,被称为“几何之父”。他最著名的著作《几何原本》是欧洲数学的基础,提出五大公设,欧几里得几何,被广泛的认为是历史上最成功的教科书。欧几里得也写了一些关于透视、圆锥曲线、球面几何学及数论的作品。(https://baike.baidu.com/item...

weixin_26834281的博客 1203

算法欧几里得辗转相除法的原理

目录辗转相除法的原理更相减损术(辗转相减法)算法实现求最小公倍数 辗转相除法的原理 辗转相除法具体是谁提出的也难以考证,但是这个算法最早出现在古希腊数学家欧几里得的著作-----《几何原本》中,所以也都叫做欧几里得算法 辗转相除法:用a除以b(这里是a>b,当然,在程序编程中,求两个数的最大公约数,可以不限a和b的大小,a<b也就是多一次循环)得到结果q和余数r,再用除数b除以余数r 再得到一个余数,再用除数除以余数,…如此循环,直到余数为0,那么此时的除数就是最大公因数 例如: 求(较大数,较

collide__的博客 4259

辗转相除法欧几里得算法)和扩展欧几里得算法实现及证明

辗转相除法欧几里得算法)和扩展欧几里得算法实现及证明 今天看了好长时间的数论知识点,学完之后,过了一个假期,再回头看扩展欧几里得时已经是 懵 懵 懵 于是我上网找到了它的证明! (叙述的可能会非常啰嗦详细) 辗转相除法: 定义及用途: 辗转相除法, 又名欧几里德算法,是求最大公约数的一种方法。它的具体做法是...

zbt_777的博客 668

辗转相除法欧几里得算法)和扩展欧几里得算法

辗转相除法欧几里得算法)和扩展欧几里得算法 辗转相除法辗转相除法是求两个自然数的最大公约数(gcd)的一种方法,也叫欧几里德算法。 例如,求(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); ∵ 5...

qq_43799957的博客 996

辗转相除法和扩展欧几里得算法

辗转相除法欧几里得算法)是用来求两个数的最大公约数c=gcd(a,b) 假设c是a和b(a>b)的最大公约数,那么a=mb+d,又因为a%c==0,且b%c==0,所以d%c==0,令d=k*c 那么a=mb+kc。。所以gcd(a,b)=gcd(b,kc),同理把b当成新的a,kc当成新的b,那么gcd(b,kc)=gcd(kc,b%kc)=...=gcd(c,0) 扩展欧几里得

acraz的专栏 1369

辗转相除法

1. 初始化变量a和b为输入的两个整数。 2. 在while循环中,不断执行以下操作,直到b等于0: - 创建一个临时变量temp,并将其赋值为b的值。 - 计算a除以b的余数,并将结果赋值给b。 - 将temp的值赋给a。

2303_79299383的博客 2552

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

基本原理:两个整数的最大公约数等于,其中较小的数和两数的差的最大公约数。个人解析:若A、B有最大公约数K(A > B),则,A、B、(A - B)、A mod B(A / B的余数),都是K的倍数。即余数(A - B)和 B 的最大公公约数也是 K。由此递归,可知当 A mod B = 0,即 A 是 B 的倍数时,此时,B 即为 K。实际上,存在如下定理:两数最大公约数与最小公倍数的积等于两数之积,用公式表示就是:当时最大公因数*最小公倍数=pq。

tugouxp的专栏 1万+

2021-03-22

Description 辗转相除法,也称欧几里得算法,是求最大公约数的算法辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在中国则可以追溯至东汉出现的《九章算术》。 两个整数的最大公约数(亦称公约数)是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。例如,252和105的最大公约数是21(252 = 21 × 12;105 = 21 × 5);因为252 − 105 = 147,所以147和105的最大公约数也

HNGS04290724的博客 1306

一文看懂什么是欧几里得算法!多图演示辗转相除算法究竟是什么!为什么要这样开展!多图预警!

将抽象的数的问题转换成具体的图形实例上来思考解决。

猪肉炖粉条的博客 1万+

辗转相除法求最大公约数

a/b=q余r,除数b和余数r能被同一个数整除,那么被除数a也能被这个数整除。即a与b的最大公约数,就是b与r的最大公约数。用较大的数除以较小的数,再以除数和余数反复做除法运算,当余数为0时,取当前算式除数为最大公约数。(a,b)=gcd(b,a%b),所以也可以设计一个递归算法计算最大公约数。最大公约数(greatest common divisor)由于被除数与除数的最大公约数,就是除数与余数的最大公约数,即。欧几里德算法(Euclidean Algorithm)当然也可以用while循环做。

qq_37660556的博客 1171

求最大公约数(辗转相除法

求最大公约数(辗转相除法),超详细版本,简单易懂,每条代码都有注释!

m0_73500410的博客 4614

Matlab2021a破解版安装与激活实战教程(含详细步骤截图)

本文详细介绍了MATLAB R2021a的正版安装流程与核心功能优化,包括系统要求、安装步骤、性能调优及深度学习工具箱的应用。通过实战教程和代码示例,帮助用户高效搭建开发环境并掌握关键技术,特别适合工程计算与科学研究的专业人士。

vvv99的博客 398

2011-2020年 中国老年社会追踪调查CLASS

中国老年社会追踪调查(China Longitudinal Aging Social Survey,CLASS)是一个全国性、连续性、系统性、长期性的社会调查项目。通过定期、系统地收集中国老年人群社会、经济背景数据,掌握老年人在衰老过程中面临的各种问题和挑战,评估各项社会政策措施在提高老年人生活质量方面所取得的实际效果,为中国老龄问题的解决提供重要的理论和事实依据。数据年份:2011年 2012年 2014年 2016年 2018年 2020年相关数据性别、出生年月、文化程度、民族、目前的婚姻状况、配偶情况、政治面貌、户籍地、身体健康状况、受访者居住的社区类型、受访者居住的地区类型、老年人是什么类型、被访老年人当前状态等等

上一篇: Matlab中常用的几个清除命令
下一篇: 裴蜀定理(贝祖定理)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值