您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python中的Euler 5项目-如何优化解决方案?

Python中的Euler 5项目-如何优化解决方案?

在迈克尔·迈尔(Michael Mior)的建议下,我and了oke。我尝试使用一些技巧来使其快速

由于我们需要一个相对较短的数字列表,因此我们可以预先构建数字列表,而不用反复调用xrange()range()

另外,虽然只将数字[1, 2, 3, ..., 20]放在列表中是可行的,但我们可以考虑一下,然后取出数字:

只需取出1。每个整数均可以被1整除。

如果我们将20英寸留在,则无需保留2英寸。任何被20整除的整数都可以被2整除(但反之可能不成立)。因此,我们留下20,取出2、4和5。保留19,因为它是素数。保留18,但现在我们可以取出3和6。如果重复此过程,最后会出现一个简短得多的数字列表。

正如迈克尔·迈尔(Michael Mior)所建议的,我们从20开始,然后以20为步长。all()正如戳建议的那样,我们在中使用了生成器表达式。

取而代之的是中while环,我用了一个for环带xrange(); 我认为这稍微快一点。

结果:

check_list = [11, 13, 14, 16, 17, 18, 19, 20]

def find_solution(step):
    for num in xrange(step, 999999999, step):
        if all(num % n == 0 for n in check_list):
            return num
    return None

if __name__ == '__main__':
    solution = find_solution(20)
    if solution is None:
        print "No answer found"
    else:
        print "found an answer:", solution

在我的计算机上,这可以在9秒内找到答案。

编辑:而且,如果我们听取大卫·扎斯拉夫斯基(David Zaslavsky)的建议,我们意识到我们可以在2520开始循环,然后在2520之前完成。如果我这样做,那么在我的计算机上,我会在十分之一秒内得到正确的答案。

我提出了find_solution()一个论点。尝试致电find_solution(2520)

python 2022/1/1 18:45:50 有319人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶