繁体   English   中英

Python - 数字之和

[英]Python - Sum of numbers

我试图将所有数字加到一个范围内,所有数字都达到相同的范围。

我正在使用python:

limit = 10
sums = []
for x in range(1,limit+1):
    for y in range(1,limit+1):
        sums.append(x+y)

然而,这很好,因为嵌套循环,如果限制太大,则需要花费大量时间来计算总和。

没有嵌套循环有没有办法做到这一点?

(这只是为了解决ProjectEuler问题我需要做的一些简化。它涉及获得所有大量数字的总和。)

[x + y for x in xrange(limit + 1) for y in xrange(x + 1)]

这仍然执行尽可能多的计算,但它的速度大约是for循环的两倍。

from itertools import combinations

(a + b for a, b in combinations(xrange(n + 1, 2)))

这避免了大量重复的总和。 我不知道你是否想跟踪这些与否。

如果你只是希望每个总和没有代表你如何得到它,那么xrange(2*n + 2)给你你想要的东西,没有重复或循环。

在回答问题时:

 [x + y for x in set set1 for y in set2]

我试图将所有数字加到一个范围内,所有数字都达到相同的范围。

所以你想要计算limit**2总和。

由于嵌套循环,如果限制太大,则需要花费大量时间来计算总和。

错误:它不是 “因为嵌套循环” - 这是因为你计算了二次数的和,因此做了二次方的工作量。

没有嵌套循环有没有办法做到这一点?

您可以屏蔽嵌套,就像在@ aaron的答案中一样,并且您可以将由于问题的模拟而计算的总和的数量减半(尽管这与您的代码不同),但是,准备一个包含二次数的项目,绝对没有办法避免做二次数量的工作。

但是,为了您的声明目的

获得所有丰富数字的总和。

你需要无限量的工作,因为有无数的丰富数字;-)。

我认为你有问题23,这实际上是非常不同的:它要求所有数字的总和不能表示为两个丰富数字的总和。 您所询问的总和如何帮助您更接近该解决方案真的让我失望。

我不确定是否有一种不使用嵌套循环的好方法。

如果我穿上你的鞋子,我会写如下:

[x + y表示范围内的x(1,限制+ 1),y表示范围(1,限制+ 1)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM