gpt4 book ai didi

python - 使用 python 的欧拉项目 #5

转载 作者:太空宇宙 更新时间:2023-11-04 03:29:03 25 4
gpt4 key购买 nike

问题陈述是这样的:

2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.

What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?

这是我的解决方案:

x=2520.0
list=[]
true_list=[11.0, 12.0, 13.0, 14.0, 16.0, 17.0, 18.0, 19.0, 20.0]
b=1
def test():
for n in true_list:
z=x/n
if z%2==0:
list.append(n)
while b==1:
test()
if list==true_list:
b=2
print x
else:
x=x+20
list=[]

-> 基本上,我定义了一个由函数 test() 填充的空列表。 test() 所做的是检查给定数字(在本例中为 x)是否可以被 11-20 的值整除。如果是,则将该值(介于 11-20 之间)放入空列表中。

当然,当 test() 运行时,程序会检查列表是否等于预定义的 true_list,其中包含 11-20 的所有数字。如果是,则打印 x。否则,程序在增加 x 的值后继续。

这意味着如果 list 等于 true_list,则 11-20 的所有数字均除我们的数字 (x),这就是问题中的要求。

它在运行一分钟左右后给出答案:465585120.0。这恰好是不正确的。我不知道为什么会这样。我已经尝试解决这个问题 8 个多小时了,我已经束手无策了。错误是什么?

您无需提前阅读,但如果您对我为什么在我的解决方案中使用某些东西有疑问,那么我在这里解决了其中的一些问题:

->我没有使用 true_list 中的所有 20 个数字来加速程序,因为任何可以被 11-20 整除的数字也可以被 1-20 整除。

->我使用 x=x+20 来加速程序,因为它与 x=x+1 或 x+2 一样有效;只是,它更快。

->我使用了浮点值,因为我在函数“test()”中使用了 z=x/n,我不想去掉小数部分,因为这样做会使浮点值也符合后续操作即 z%2。

例子:

1) 使用 int 值:

x=17
n=2
z=x/n=8

这里,z%2==0 是有效的,但不应该是这种情况,因为它在数学上实际上是无效的。

2) 浮点值:

x=17.0
n=2.0
z=x/n=8.5

在这里,z%n != 0 应该是这样的。

最佳答案

就像其他人提到的那样,只需找到 lcm,但这里有一个简单的方法来做到这一点。只要记住 lcm(a, b, c) = lcm(a, lcm(b, c))。这就是全部:

from fractions import gcd

print(reduce(lambda a, b: a * b / gcd(a, b), range(1, 21)))

如果您想编写自己的 gcd 函数,它的工作方式如下 ( https://en.wikipedia.org/wiki/Euclidean_algorithm ):

def gcd(a, b):
while b != 0:
a, b = b, a % b
return a

关于python - 使用 python 的欧拉项目 #5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31840761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com