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

本文介绍了欧几里得算法(辗转相除法)及其证明,阐述了如何通过迭代相除求解最大公约数。此外,还探讨了扩展欧几里得算法,用于求解ax+by=gcd(a,b)的通解,并简述了通解的概念和求解过程。最后,提供了递归实现的欧几里得算法代码。
摘要由CSDN通过智能技术生成

说在开头。

出于对欧几里得的尊重,先简单介(cou)绍(ge)一(zi)下(shu).。

欧几里得,古希腊人,数学家。他活跃于托勒密一世时期的亚历山大里亚,被称为“几何之父”。

他最著名的著作《几何原本》是欧洲数学的基础,提出五大公设,欧几里得几何,被广泛的认为是历史上最成功的教科书。

欧几里得也写了一些关于透视、圆锥曲线、球面几何学及数论的作品。(https://baike.baidu.com/item/欧几里得/182343?fr=aladdin)

----------------------------------华丽的分割线-------------------------------------

以下都是自己在看书的时候自己想的一些思路,总结。

如有雷同纯属意外,如有异议可以py(仅限妹纸)。

欧几里得算法,也就是所谓的辗转相除法。人话就是,用来求最大公约数的方法。

证明:gcd(a,b)= gcd(b,a%b)

(gcd(a,b),ab的最大公约数;a%b,求模运算,也就是求余数运算。比如7%2=1。)

证明过程:

设正整数a,b(a>b)。

设:gcd(a,b)= c  (我就要设c)

则有:c|a ,c|b  (|,表示可以整除)

设: a = bx + a%b  (x为整数,因为这是求余运算,emmm,这样说应该够平易近人了吧)

则有:a%b = a - bx  (别说恒等变换不知道。233333)

因为:c|b  则 c|bx  (因为c|b=k(k为整数),则kx为整数,这样说够清楚了吧。emmmm)

则:(a%b)/c = (a - bx)/ c    ====》  (a%b)/c = a/c - bx/c

因为:c|a , c|bx

故:a/c,bx/c都为整数,所以a/c - bx/c 也是整数。所以(a%b)也可以被c整数。

即:c |(a%b)

又因为:c|b

故:gcd(b,a%b)= c

则:gcd(a,b)= gcd(b,a%b) 得证。(这证明过程,我就不信全网还有比这写的更清楚的。)

证明完这个我们就可以通过迭代,反复相除(辗转相除)来求ab的最大公约数了。

emmm,为什么就可以了呢。因为gcd(a,b)= gcd(b,a%b)  就是一个反复的过程。

比如我可以继续写:gcd(a,b)= gcd(b,a%b) = gcd(a%b,b%(a%b))=gcd(r1,r2)=·······=gcd(rn-1,rn)(rn=rn-2%rn-1)

这样是不是可以更清楚点了。。

代码实现(递归实现)

1、递归操作:辗转相除

2、递归结束操作:余数为0

"""

这只是一个简单版本。

比如,对没有最大公约数的情况并没有做判断。

"""

def gcd(a,b):

if a < b:

a, b = b, a

if a % b != 0:

return gcd(b,a%b)

return b

------------------------------分割线-------------------------------------

回家睡觉。明天再说。困死了。

先给出扩展欧几里得扩展算法实现。有空再说。

-----------------------------分割线---------------------------------------

好吧,之前太懒了。。

万恶的欧几里得扩展:

简单来说就是求ax+by=z的通解。

下面就先来说说什么是通解。

首先,设数字a,b。(a,b>0),并且ab存在最大公约数(没有公约数还玩什么欧几里得)

设最大公约数为c,即gcd(a,b)= c

然后有 ax+by = c,求出的这个x,y就是所谓的ax+by=z的通解。

为什么这么说呢。这里就用简单的办法来说明一下。(可能不严谨)

拿上面的ax+by=c,两边同时乘一个k,即a(xk)+b(yk)= ck

同时令ck=z,则有a(xk)+b(yk)= z。刚才已经把x,y求出来了。

那么这里都乘一个k就可以算出ax+by=z中的x和y了。

(自认为虽然不严谨,但很清楚了。嗯嗯)

然后,接下来就来说一说。这个ax+by=gcd(a,b)的解,x,y怎么算吧。

(不严谨的证明开始了~~)

----------------没时间了,明天再说-----------------------

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值