首页 > 解决方案 > 使用查找除数的函数,找到任意两个给定两个正整数的最大公约数

问题描述

这是我到目前为止所拥有的

def div(x):
    A=[]
    for i in range(1,x):
        if x%i==0:
            A.append(i)
    print(A)
div(45)
div(50)
n=0
for i in range(1, min(45, 50)+1): 
    if 45%i==50%i==0: 
        n+=1
print(max(n))
TypeError                                 Traceback (most recent call last)
<ipython-input-8-80ad9173d3fa> in <module>
     11     if 45%i==50%i==0:
     12         n+=1
---> 13 print(max(n))

TypeError: 'int' object is not iterable

我尝试了多种逻辑,但最终都出现了一些错误。这是最合适的。我还是个新手,所以一个简单的程序仍然给我带来了问题。这个问题只是用来测试我们的逻辑构建。

标签: pythonpython-3.x

解决方案


您的行将n=0名称定义n为整数。然后稍后您尝试执行print(max(n)).

换句话说,您尝试计算max()单个整数的 。这就是引发您的错误消息的原因。max() 的文档给出了 的两种有效用法max():单个可迭代(例如列表)或多个值(例如整数)。不允许使用单个整数。

我不确定你的意图是什么,所以我不能建议你对你的程序做一点小改动。我建议你改变你的方法。相反,您可以这样做:

  1. 调用div()两个整数中的每一个,得到两个除数列表。
  2. 将每个列表转换为Python 集
  3. 计算这两组的交集(有关执行此操作的操作,请参见上一个链接)。你现在有一组公约数。
  4. 在该交集中找到最大值。由于集合是可迭代的,max()因此将在该集合上工作。得到的最大值是你的最大公约数。

代码应该很容易编写。如果您有困难,请展示您的尝试并寻求更多帮助。

顺便说一句,您的div功能不正确。范围的上限应该是x + 1包含数字x作为除数——任何整数都可以除以自身。而不是打印列表,div()应该将列表返回给调用例程。


推荐阅读