首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >项目Euler - python中的#6

项目Euler - python中的#6
EN

Stack Overflow用户
提问于 2014-04-26 02:47:29
回答 2查看 2.7K关注 0票数 0

因此,我最近发现了euler项目,它非常适合在编程语言中进行实验和实践。我最近刚刚想出了问题6的答案,但我觉得这是一种如此丑陋和不优雅的方式。

这个问题会问:

前十个自然数的平方和是,1**2 + 2**2 + ... + 10**2 = 385

前十个自然数之和的平方为:(1 +2+…+ 10)**2 = 552 = 3025

因此,前十个自然数的平方和与总和的平方之间的差为3025−385 = 2640。

求出前100个自然数的平方和与总和的平方之和之差。

我的代码如下所示:

代码语言:javascript
复制
def sum_sq(value):
    count = value + 1
    while count > 0:
        sum_sq = []
        for x in range(count):
            sum_sq.append(x**2)
            count = count - 1
        sum_sq = sum(p)

    count1 = value + 1
    while count1 > 0:
        sq_sum = []
        for i in range(count1):
            sq_sum.append(i)
            count1 = count1 - 1
        sq_sum = sum(sq_sum)**2
    return sq_sum - sum_sq


>>> sum_sq(10)
2640
>>> sum_sq(100)
25502115

你们有什么建议可以让它变得更短更高效吗?我是python的新手,所以请原谅我。我想学习好的编码技术,而不是养成编写糟糕代码的习惯。提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2014-04-26 03:19:38

您可以简单地执行以下操作

代码语言:javascript
复制
def sum_sq(value):
    # list of product of all unique pairs (ignoring order)  
    # of numbers in the range 1 to value, both included
    t = [i*j for i in range(1, value) for j in range(i+1, value+1)]
    return 2 * sum(t)

那是因为

代码语言:javascript
复制
(1 + 2 + 3 + ... + n)^2 - (1^2 + 2^2 + ... + n^2)
= 2(
    1*2 + 1*3 + ... + 1*n +
    2*3 + 2*4 + ... + 2*n +
    ...                   +
    ...                   +
    (n-1)*n  
   )    
票数 2
EN

Stack Overflow用户

发布于 2014-04-26 03:05:10

我很久以前就解决了这个问题,也是用Python。一些小贴士:

  • 你不需要保存列表中的每一个值来回答这个问题。这是巨大的,只需要1个while/ time-waster.
  • It循环就可以得到答案,而不是4个。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23300772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档