说在开头。

出于对欧几里得的尊重,先简单介(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怎么算吧。
(不严谨的证明开始了~~) ----------------没时间了,明天再说-----------------------
												

欧几里得算法/欧几里得扩展算法-python的更多相关文章

  1. POJ 1061 青蛙的约会(欧几里得扩展)

    题意:已知青蛙1位置x,速度m,青蛙2位置y,速度n,纬线长度为l,求他们相遇时最少跳跃次数. 思路:设最小跳跃次数为k,则(x + k*m) - (y + k*n) = q*l:经过整理得到k*(n ...

  2. 欧几里得&扩展欧几里得

    原博网址:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数 ...

  3. gcd(欧几里得算法)与exgcd(扩展欧几里得算法)

    欧几里得算法: 1.定义:gcd的意思是最大公约数,通常用扩展欧几里得算法求 原理:gcd(a, b)=gcd(b, a%b) 2.证明: 令d=gcd(a, b)  =>  a=m*d,b=n ...

  4. 【codevs 1565】【SDOI 2011】计算器 快速幂+拓展欧几里得+BSGS算法

    BSGS算法是meet in the middle思想的一种应用,参考Yveh的博客我学会了BSGS的模版和hash表模板,,, 现在才会hash是不是太弱了,,, #include<cmath ...

  5. 最大公约数与欧几里得(Euclid)算法

    ---恢复内容开始--- 记a, b的最大公约数为gcd(a, b).显然, gcd(a,b)=gcd(|a|,|b|). 计算最大公约数的Euclid算法基于下面定理: [GCD递归定理]对于任意非 ...

  6. 欧几里得(Euclid)与拓展的欧几里得算法

    欧几里得(Euclid)与拓展的欧几里得算法 欧几里得(Euclid)与拓展的欧几里得算法 欧几里得算法 原理 实现 拓展的欧几里得算法 原理 递归求解 迭代求解 欧几里得算法 原理 欧几里得算法是一 ...

  7. ****ural 1141. RSA Attack(RSA加密,扩展欧几里得算法)

    1141. RSA Attack Time limit: 1.0 secondMemory limit: 64 MB The RSA problem is the following: given a ...

  8. 扩展欧几里得算法(EXGCD)学习笔记

    0.前言 相信大家对于欧几里得算法都已经很熟悉了.再学习数论的过程中,我们会用到扩展欧几里得算法(exgcd),大家一定也了解过.这是本蒟蒻在学习扩展欧几里得算法过程中的思考与探索过程. 1.Bézo ...

  9. codeforces 1244C (思维 or 扩展欧几里得)

    (点击此处查看原题) 题意分析 已知 n , p , w, d ,求x , y, z的值 ,他们的关系为: x + y + z = n x * w + y * d = p 思维法 当 y < w ...

随机推荐

  1. PHP调优

    目录 php.ini 内存 Zend OPcache 文件上传 最长执行时间 处理会话 缓冲输出 真实路径缓存 php.ini PHP解释器在 php.ini 文件中配置和调优.web和cli使用的路 ...

  2. redis主从,哨兵,集群

    本次所有操作在docker下进行,搭建方便,迅速构建redis集群. 1. docker安装redis 获取redis:latest(使用官方最新的) 镜像 $ docker pull redis r ...

  3. redis3.2.9编译安装

    Redis 3.2.9 安装 Redis 3.2.9 编译安装 1,   安装相关软件包 2,   下载redis源码包 wget http://source.goyun.org:8000/sourc ...

  4. Spark 2.x 中 Sort-Based Shuffle 产生的内幕

    本课主题 Sorted-Based Shuffle 的诞生和介绍 Shuffle 中六大令人费解的问题 Sorted-Based Shuffle 的排序和源码鉴赏 Shuffle 在运行时的内存管理 ...

  5. CentOS使用PXE网络启动自动安装操作系统

    PXE工作原理简介 PXE (Preboot Excution Environment) 预启动执行环境 工作环境介绍: 要实现PXE自动网络安装CentOS至少需要两台主机 1)PXE服务器PXE ...

  6. 019.2 map集合类

    Map<k,v>Map:双列集合,一次存一对,键值对,类似于python的字典.共性功能:1.添加    v put(key,value)     //返回key的旧值    putAll ...

  7. BZOJ1014:[JSOI2008]火星人(Splay,hash)

    Description 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样一个字符串:madamimadam, 我们将这个字符串的各个字符予以标号:序号: 1 2 3 4 5 6 ...

  8. Spring(四)之Bean生命周期、BeanPost处理

    一.Bean 生命周期 Spring bean的生命周期很容易理解.当bean被实例化时,可能需要执行一些初始化以使其进入可用状态.类似地,当不再需要bean并从容器中移除bean时,可能需要进行一些 ...

  9. 多线程简单案例 - join( ) -lock()

    join() 在调用结束前,主线程不会结束 不加的话,主线程会在子线程结束前继续执行:加了join(),主线程会等待子线程结束后在继续执行下去 #python3 #main print number ...

  10. vlc源码分析(六) 调用OpenMAX硬解码H.265

    H.265(HEVC)编码格式能够在得到相同编码质量视频的前提下,使用相当于H.264(AVC)一半的存储容量,虽然H.265的算法复杂度比H.264高一个数量级,但是硬件水平在不断提高,因此H.26 ...