这篇文章主要介绍了使用Python求解最大公约数的实现方法,包括用Python表示欧几里得算法和Stein算法的求解原理.

1. 欧几里德算法

欧几里德算法又称辗转相除法, 用于计算两个整数a, b的最大公约数。其计算原理依赖于下面的定理:

定理: gcd(a, b) = gcd(b, a mod b)

证明:

a可以表示成a = kb r, 则r = a mod b

假设d是a, b的一个公约数, 则有 d|a, d|b, 而r = a - kb,

因此d|r。

因此,d是(b, a mod b)的公约数。

加上d是(b,a mod b)的公约数,则d|b, d|r, 但是a = kb r,因此d也是(a, b)的公约数。

因此,(a, b) 和(a, a mod b)的公约数是一样的,其最大公约数也必然相等,得证。

欧几里德的Python语言描述为:

2. Stein算法

欧几里德算法是计算两个数最大公约数的传统算法,无论是理论,还是从效率上都是很好的。但是他有一个致命的缺陷,这个缺陷只有在很大的素数时才会显现出来。

考虑现在的硬件平台,一般整数最多也就是64位,

对于这样的整数,计算两个数值就的模很简单的。对于字长为32位的平台,计算两个不超过32位的整数的模,只需要一个指令周期,而计算64位以下的整数模,也不过几个周期而已。但是对于更大的素数,这样的计算过程就不得不由用户来设计,为了计算两个超过64位的整数的模,用户也许不得不采用类似于多位除法手算过程中的试商法,这个过程不但复杂,而且消耗了很多CPU时间。对于现代密码算法,要求计算128位以上的素数的情况比比皆是,设计这样的程序迫切希望能够抛弃除法和取模。

Stein算法由J.Stein

1961年提出,这个方法也是计算两个数的最大公约数。和欧几里德算法不同的是,Stein算法只有整数的移位和加减法,这对于程序设计者是一个福音。

为了说明Stein算法的正确性,首先必须注意到以下结论:

gcd(a, a) = a, 也就是一个数和他自己的公约数是其自身。

gcd(ka, kb) = k * gcd(a,

b),也就是最大公约数运算和倍乘运算可以交换,特殊的,当k=2时,说明两个偶数的最大公约数比如能被2整除。

Stein算法的python实现如下: def gcd_Stein(a, b):  if a < b:

a, b = b,

a

if (0 == b):

return

a

if a % 2 == 0 and b % 2 == 0:

return 2 *

gcd_Stein(a/2, b/2)

if a % 2 == 0:

return

gcd_Stein(a / 2, b)

if b % 2 == 0:

return

gcd_Stein(a, b / 2)

return gcd_Stein((a b) / 2, (a - b) /

2) 3. 一般求解实现

核心代码很简单: def gcd(a, b):

if b == 0:return a

return gcd(b, a % b)

附上一个用Python实现求最大公约数同时判断是否是素数的一般方法:

程序如下: #!/usr/bin/env python def showMaxFactor(num): count = num / 2 while count >

1: if num %

count == 0: print 'largest factor of %d is %d' % (num,

count) break #break跳出时会跳出下面的else语句 count -=

1

else: print num,

"is prime"

for eachNum in range(10,21): showMaxFactor(eachNum) 输出如下: largest factor of 10 is 5

11 is prime

largest factor of 12 is 6

13 is prime

largest factor of 14 is 7

largest factor of 15 is 5

largest factor of 16 is 8

17 is prime

largest factor of 18 is 9

19 is prime

largest factor of 20 is 10

最大公约数python语言算法_使用Python求解最大公约数的实现方法相关推荐

  1. python回归算法_基于Python的函数回归算法验证

    看机器学习看到了回归函数,看了一半看不下去了,看到能用方差进行函数回归,又手痒痒了,自己推公式写代码验证: 常见的最小二乘法是一阶函数回归 回归方法就是寻找方差的最小值 y = kx + b xi, ...

  2. python自动化算法_基于Python语言和Abaqus平台的边坡可靠度计算自动化算法开发

    2.2 求解过程 求解过程包括7步,如 图 2 图 2 自动化程序的求解过程 Fig. 2 The solving part of the automation program 1) Python形成 ...

  3. python 最短路径算法_最短路径python

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 最短路径问题(python实现)解决最短路径问题:(如下三种算法)(1)迪杰斯特 ...

  4. python分治算法_黄哥Python:分治算法(Divide-and-Conquer)

    分治算法(Divide-and-Conquer) 在计算机科学中,分而治之(简称分治法)是基于多分支递归的算法设计范例.分而治之算法的工作原理是将问题递归分解为两个或多个相同或相关类型的子问题,直到这 ...

  5. python分类算法_用Python实现KNN分类算法

    本文实例为大家分享了Python KNN分类算法的具体代码,供大家参考,具体内容如下 KNN分类算法应该算得上是机器学习中最简单的分类算法了,所谓KNN即为K-NearestNeighbor(K个最邻 ...

  6. python寻峰算法_在python中快速查找峰和质心

    我正在尝试在python中开发一种快速算法,以查找图像中的峰值,然后找到这些峰值的质心.我使用scipy.ndimage.label和ndimage.find_objects编写了以下代码来查找对象. ...

  7. python去重算法_使用Python检测文章抄袭及去重算法原理解析

    在互联网出现之前,"抄"很不方便,一是"源"少,而是发布渠道少:而在互联网出现之后,"抄"变得很简单,铺天盖地的"源"源 ...

  8. python自动化算法_用Python自动化你的机器学习过程——TPOT和基因算法

    自动化机器学习(Automatic Machine Learning,简称AML)是一种流水线(也称管道),它能够让你自动执行机器学习(ML)问题中的重复步骤,从而节省时间,让你专注于使你的专业知识发 ...

  9. python语言例子_【Python】SimPy的使用示例-Go语言中文社区

    使用SimPY进行离散事件仿真 SimPY是一个Python下的第三方库,可以方便的进行离散事件的仿真.仿真速度比较快.下面记录一下我的一点心得,不保证完全正确,供参考. 安装 $ pip insta ...

最新文章

  1. PHP header的几种用法
  2. 重塑世界的区块链技术你必须要懂得
  3. 美观大气!一款基于 Spring Boot 开发 OA 开源产品
  4. Java程序员一些常用的日志和其他Linux命令(自用)
  5. service nginx start启动nginx出现Failed to start nginx.service:unit not found
  6. Linux内核分析 读书笔记 (第四章)
  7. 【Spark Summit EU 2016】使用参数服务器在Spark上扩展因式分解机
  8. SVN MKACTIVITY
  9. 看拉扎维《模拟CMOS集成电路设计》的一些总结和思考(九)——运算放大器
  10. 如何保证服装ERP项目成功施行
  11. 数字鉴相器matlab,一种数字鉴相器的设计.pdf
  12. JavaScript归纳总结
  13. [小知识] WPS恢复本地历史数据
  14. 合天网安实验室CTF-Exp200-Come on,Exploit me!
  15. 一篇文章搞懂前端学习方法与构建知识体系
  16. 瀚高CEO苗健:用开源软件改变中国基础软件产业格局
  17. Pathfinding 模板题 /// BFS oj21413
  18. 字符串匹配 KMP算法
  19. Redis 官方文档阅读之 High Availability
  20. 关于IDEA ZK前端插件的问题

热门文章

  1. 计划任务如何使用 java_java – 如何计划任务以定期间隔运行?
  2. Python MySQL删除表
  3. 【OpenCV 例程200篇】31. 图像金字塔(cv2.pyrDown)
  4. mysql联合索引like_MySQL全文索引、联合索引、like查询、json查询速度大比拼
  5. 导出excel数字前面的0消失_Excel操作中常见的3大坑你遇到过吗?遇到应该这么解决...
  6. mulitpartfile怎么接收不到值_和平精英信号接收区和信号值是什么?信号值怎么恢复...
  7. STL8-string容器
  8. STL Map学习总结
  9. VGG网络结构(二)
  10. jmeter模拟压测真实复杂用户场景,阶梯螺纹线程组Stepping Thread Group终极线程Ultimate Thread Group并发线程Concurrency Thread Group