【发布时间】:2018-08-05 19:10:19
【问题描述】:
这是Project Euler网站的问题5。
def divisable_into_1to20(num):
for i in range(11,21):
if num % i != 0:
return False
return True
for i in range(2520,10000000000):
if divisable_into_1to20(i):
print(i)
break
需要 140 秒
【问题讨论】:
-
这个问题的预期输出是什么?
-
他们;大概希望你在数学上考虑清楚,然后计算并乘以因子,而不是一一检查每个数字。
-
例如:能被1、2、3整除的最小数是
1*2*3=6。能被 1、2、3 和 4 整除的最小数不是 24,而是 12。为什么?因为 4 已经处理了 2(并且 1 已经处理好了),所以它是3*4如果你能弄清楚如何向 5 岁的孩子解释这个逻辑,那么你可以把这个逻辑变成代码,你可以得到前20个数字的最小公倍数。 -
如果此代码在如此短的时间(140 秒)内运行并给出正确答案,则您可以访问 ProjectEuler 讨论页面来解决此问题。在那里您可以看到其他方法,包括 Python 中的一些方法。为什么不适合你? ProjectEuler 明确表示,您不应在此类网站上寻求帮助。
-
作为一个投影机爱好者,我必须说我真的不喜欢那些在不是投影机论坛的其他网站上发布投影机答案(非最佳或最佳)的人,这样做不仅会违背projecteuler“规则”,但你也可能为那些没有找到答案的人偷走一些乐趣......当然,人们可以选择不看......但即便如此,我认为这是错误的,所以我们开始吧,我对你的问题投了反对票:)。请务必仔细阅读https://projecteuler.net/about。
标签: python optimization