首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >用辗转相除法求两个正整数的最大公约数

用辗转相除法求两个正整数的最大公约数

作者头像
阿黎逸阳
发布2020-09-08 10:27:02
发布2020-09-08 10:27:02
5.2K00
代码可运行
举报
运行总次数:0
代码可运行

初中的时候我们学过用辗转相除法求最大公约数,今天用Python来实现这个功能。

一、问题描述

辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:

用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。

二、代码实现原理讲解

  • step1: 将两数中大的那个数放在m中,小的放在n中。
  • step2: 求出m被n除后的余数r。
  • step3: 若余数为0则执行步骤(7),否则执行步骤(4)。
  • step4: 把除数作为新的被除数;把余数作为新的除数。
  • step5: 求出新的余数r。
  • step6: 重复步骤(3)到(5)。
  • step7: 输出n,n即为最大公约数。

三、Python程序实现

1 Python代码

代码语言:javascript
代码运行次数:0
运行
复制
m,n = map(int,input("请输入两个数:").split(","))  #输入两个数用逗号分开
if m<n:         #如果m比n小,互换m和n的位置
    m,n = n,m
r = m%n         #求出m除n的余数
while r:       #如果余数不为0,进行循环
    m=n        #把n赋值给m
    n=r        #把r赋值给n
    r = m%n    #求余数      
print(f"最大公约数是{n}") #输出n,即为最大公约数

代码解析:

m,n: 先用split函数把输入用逗号分隔的两个数分离,再用map函数把分离的两个数变成整数,最后分别赋值给m和n。

if: 在后面的代码中m作为被除数,要比n大,所以如果m小于n,则交换m和n的值(Python中不用第三个变量作为中间变量,可直接用上述语句进行变量间值的交换)。

while: 如果余数不为0,则把n赋值给m,r赋值给n,算出新的余数,直到余数变为0,程序结束,得到的n即为最大公约数。

print: 打印出最大公约数。

2 实例

实例一:

代码语言:javascript
代码运行次数:0
运行
复制
124668,3456668   #输入两个数

得到结果:

代码语言:javascript
代码运行次数:0
运行
复制
最大公约数是4

实例二:

代码语言:javascript
代码运行次数:0
运行
复制
128,48  #输入两个数

得到结果:

代码语言:javascript
代码运行次数:0
运行
复制
最大公约数是16
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 阿黎逸阳的代码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档