python项目euler 6,任意数字

时间:2017-02-01 19:25:55

标签: python

我在使用Project Euler#6时遇到了麻烦。问题如下:

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

我正在尝试以这样的方式编写我的代码:Euler(所有数字,包括100)中的内容可以替换您喜欢的任何数字(所有数字都包括x)。我决定,为了做到这一点,你需要3个功能。代码是:

#the sumSquare function squares every number from 0 to number called 
#in the function and adds each term to a list. the function returns the sum
#of all numbers in this list

def sumSquare(num):
    list1 = []

    for i in range(num+1):
        x = i^2
        list1.append(x)
    return sum(list1)


#the squareSum function adds every whole number from 0 up to and including
#the number called in the function to list2. It returns the sum squared of  #every number in the list


def squareSum(num):
    list2 = []
    for i in range(1,num+1):
        list2.append(i)
    return (sum(list2) * sum(list2))

def ans(num):
    return squareSum(num) - sumSquare(num)



print ans(100)

我的输出是2549748,但我在网上看到正确的解决方案是25164150.有没有人知道我哪里出错了。我只是在学习编码,所以我可能会遗漏那些经验丰富的人很容易发现的东西。但据我所知,这些清单在汇总之前已经填满了适当的数字。

4 个答案:

答案 0 :(得分:2)

这个

i^2

Python中不是正方形。使用i*ii**2作为正方形。

答案 1 :(得分:0)

您的代码是任何语言代码。但是有了sintax的错误。 真正的Python功能是** 如此。

Python风格的代码看起来像那样:

print(sum(range(1, 101))**2 - sum([i**2 for i in range(1, 101)]))

这就是为什么他们喜欢Python(R)

答案 2 :(得分:0)

感谢大家的投入。在思考了一下后,我意识到这段代码过于复杂。我意识到如果所有三个函数都采用相同的变量来解决问题,它可以简化为一个函数,它自己处理每个步骤。提出这个解决方案显然效率更高:

import time


def ans(num):
    numSq = []
    for i in range(1, num+1):
        numSq.append(i**2)
    return ((sum(range(1, num+1))**2)-sum(numSq))

start_time = time.time()
print ans(100)
print "This program took {} seconds to execute.".\
format(time.time() - start_time)

运行你得到的程序:

25164150
This program took 0.00800013542175 seconds to execute.

再次感谢我在第一篇文章中的输入!

答案 3 :(得分:0)

def diffSum():
    sumSquares = 0
    squareSum = 0
    sumT = 0
    for i in range(1,101):
        sumSquares = sumSquares + (i * i)
    for i in range(1,101):
        sumT = sumT + i
    squareSum = sumT * sumT
    return squareSum - sumSquares

#sumsquares gets all the summation of the square numbers of the first 100 numbers
#sumT stores the summation of the first 100 numbers 
#squareSum squares the summation of the first 100 numbers 
#returns the difference between sumSquares and squareSum