博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从错误中学python(4)——最小公约数与辗转相除法
阅读量:6254 次
发布时间:2019-06-22

本文共 1242 字,大约阅读时间需要 4 分钟。

题目

给你两个正整数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,aprint(a)

这样就简洁多了

列表法

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

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

转载地址:http://petsa.baihongyu.com/

你可能感兴趣的文章
Python IDLE快捷键【转载合集】
查看>>
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound
查看>>
[C++] string与int, float, double相互转换
查看>>
ubuntu14.04安装chrome
查看>>
oracle中查询含字母的数据[正则表达式]
查看>>
1002. 写这个号码 (20)(数学啊 ZJU_PAT)
查看>>
【LeetCode】224. Basic Calculator
查看>>
Keil V4.72升级到V5.1X之后
查看>>
Google CFO 辞职信
查看>>
POJ2771_Guardian of Decency(二分图/最大独立集=N-最大匹配)
查看>>
Scala深入浅出实战经典之 List伴生对象操作方法代码实战.
查看>>
php 批量处理post数据
查看>>
RESTful架构详解(转)
查看>>
xcode 在哪里新建category、protocol等文件
查看>>
flash flex 程序出现错误 Error #2032
查看>>
【数据库】主键、外键、索引
查看>>
C#解析HTML
查看>>
导出/打印项目数据报表需要设置IE浏览器
查看>>
8个强大的基于Bootstrap的CSS框架
查看>>
MAC OSX在视图port哪个程序占用,杀死进程的方法
查看>>