题目

给你两个正整数a和b, 输出它们的最大公约数

辗转相除法

辗转相除法的步骤

def gcd(b,a):
b,a=a,b%a
if a==0:
return b
else:
return gcd(b,a)

即就是取假设b与a不能整除,就取a和b除以a的余数再考察是个递归的思路。

理解

能够从两个角度去理解辗转相除法

1.举例法

一张长方形纸,长2703厘米。宽1113厘米.要把它截成若干个相同大小的正方形,纸张不能有剩余且正方形的边长要尽可能大.问:这样的正方形的边长是多少厘米?

解答:

可知:在长2703厘米、宽1113厘米的长方形纸的一端,依次裁去以宽(1113厘米)为边长的正方形2个。在裁后剩下的长1113厘米。宽477厘米的长方形中,再裁去以宽(477厘米)为边长的正方形2个。

然后又在裁剩下的长方形(长477厘米,宽159厘米)中,以159厘米为边长裁正方形,恰好裁成3个,且无剩余。

因此可知。159厘米是477厘米、1113厘米和2703厘米的约数。

所以裁成相同大的,且边长尽可能长的正方形的边长应是159厘米。所以,159厘米是2703和1113的最大公约数。

让我们把过程转化为计算过程,即:

2703÷1113,商2余477;

1113÷477,商2余159;

477÷159,商3余0。

当余数为0时。最后一个算式中的除数159就是原来两个数2703和1113的最大公约数。

可见。477=159×3,

1113=159×3×2+159=159×7。

2703=159×7×2+477=159×7×2+159×3=159×17。

又∵7和17是互质数,

∴159是2703和1113的最大公约数。

我们把这样的求最大公约数的方法叫做辗转相除法.辗转相除法的长处在于它能在较短的时间内求出随意两个数的最大公约数。

2.公式理解法

b=ak+r;假设一个数能整除a和r,那么一定能整除b

python解法

def gcd(b,a):
b,a=a,b%a
if a==0:
return b
else:
return gcd(b,a) print(gcd(a,b))

这个解法已经非常长了。可是有解法还要推断a与b谁大谁小,事实上是非常没有必要的。由于取余数后还是一样的。这里我们这篇文章的名字叫从错误中学python。并非说这样的解法错了,而是说不够简洁。不能体现出Python的优越性。

循环法

这里我们使用循环来取代前面的递归

while(b%a!=0):
a,b=b%a,a
print(a)

这样就简洁多了

列表法

仅仅有一行代码,使用max()函数;我觉得是比較简洁的。可是效率非常低。时间复杂度高。

print(max([i for i in range(
posted @
2017-08-11 19:16 
lytwajue 
阅读(...) 
评论(...) 
编辑 
收藏

从错误中学python(4)——最小公约数与辗转相除法的更多相关文章

  1. 从错误中学python(2)————字符串转浮点数

    题目 自己编写函数:利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456: 题目来源--致敬廖雪峰 解决过程 初步的解决方法 def str2f ...

  2. 最小公约数(欧几里得算法&&stein算法)

    求最小公约数,最easy想到的是欧几里得算法,这个算法也是比較easy理解的,效率也是非常不错的. 也叫做辗转相除法. 对随意两个数a.b(a>b).d=gcd(a.b),假设b不为零.那么gc ...

  3. 一个好的函数(gcd)求最小公约数

    这个函数是我无意中看到的很不错,很给力,我喜欢 是用于求最小公约数的 简单的描述就是,记gcd(a,b)表示非负整数a,b的最大公因数,那么:gcd(a,b)=gcd(b,a%b)或者gcd(a,0) ...

  4. 洛谷P1029 最小公约数和最大公倍数问题【数论】

    题目:https://www.luogu.org/problemnew/show/P1029 题意: 给定两个数$x$和$y$,问能找到多少对数$P$$Q$,使得他们的最小公约数是$x$最大公倍数是$ ...

  5. src/MD2.c:31:20: 错误:Python.h:没有那个文件或目录

    一.前言 在CentOS 上安装fabric时出现问题,首先已安装pip, 用pip执行以下命令pip install 出现以下问题 [niy@niy-computer /]$ sudo pip in ...

  6. 在执行 pip install 时遇到错误:python setup.py egg_info ...

    最近重新安装win10 64位专业版, 正好遇到python3.8发布,试了一下.结果jupyter都安装不了...心碎. ERROR: Command errored out with exit s ...

  7. 【编写程序中经常犯的一些错误】 Python | 面向对象(一)

    [编写程序中经常犯的一些错误]Python | 面向对象(一) 在学习Python的面向对象这一部分时,经常出现以下错误: 这是错误范例,请仔细甄别: class Person: def __int_ ...

  8. Python安装mysql-python错误提示python setup.py egg_info

    做python项目,需要用到mysql,一般用python-mysql,安装时遇到错误提示如下: Command "python setup.py egg_info" failed ...

  9. 使用Anaconda的python安装虚拟环境是出现错误:python -m venv venvdir----Error: Command '['D:\\Development\\Django\\test\\Scripts\\python.exe', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit

    在创建python虚拟环境的时候,如果使用的是Anaconda中集成的python -m venv venvdir就会出现不能安装pip的错误,原因是Anaconda没有ensurepip, 解决办法 ...

随机推荐

  1. Mac下进行基于java服务端语言的微信公众号本地js-sdk调试的大致方法

    开发微信公众号应用调用js-sdk,需要先在微信公众号后台配置可信域名,之后从微信的入口地址重定向到改域名下的路径后便会返回code,之后可以拿到一系列需要的参数等等.那么本地开发,如果使用的是PHP ...

  2. [Node.js]23. Level 4: Semantic versioning

    Update the versions on your dependencies to be a little more flexible, adding the ~ in front of your ...

  3. Jquery attr("checked") 返回checked或undefined 获取选中失效

    $('#cb').attr('checked'); 返回的是checked或者是undefined,不是原来的true和false了,有关此问题的解决方法如下: <input type='che ...

  4. 连接SDE空间数据库——SQL Server篇

    一.软件配置 要从 ArcMap 连接至 SQL Server 中的数据库或地理数据库,请在 ArcMap 计算机上安装 SQL Server native client 或 Microsoft OD ...

  5. 配置Tomcat和JDK

    第一步:下载jdk和tomcat 第二步:安装和配置你的j2sdk和tomcat:执行j2sdk和tomcat的安装程序,然后按默认设置进行安装即可. 1.安装j2sdk以后,需要配置一下环境变量,在 ...

  6. JSP实现数据保存(web基础学习笔记四)

    session对象: //服务端设置Session属性 session.setAttribute("user", username); //客户端接收Session Object ...

  7. 解决document.location.href下载文件时中文乱码

    1:tomcat 安装路径下 找到 conf文件下的server.xml 2:<Connector port="8080" URIEncoding="utf-8&q ...

  8. linux YUM常用 命令

    语法 yum(选项)(参数) 选项 -h:显示帮助信息: -y:对所有的提问都回答“yes”: -c:指定配置文件: -q:安静模式: -v:详细模式: -d:设置调试等级(0-10): -e:设置错 ...

  9. 如何在 CentOS 7 中安装、配置和安全加固 FTP 服务

    步骤 1:安装 FTP 服务器 1. 安装 vsftpd 服务器很直接,只要在终端运行下面的命令. # yum install vsftpd 2. 安装完成后,服务先是被禁用的,因此我们需要手动启动, ...

  10. python第三方包的windows安装文件exe格式

    今天弄了一上午的python-ldap,发现要么安装vc,要么用其他比较麻烦的方法,都比较麻烦.幸好找到这个地址: http://www.lfd.uci.edu/~gohlke/pythonlibs/ ...