正方形是两个正方形之和的数字列表

Diz*_*zle 7 python numbers sum perfect-square python-2.7

我刚刚开始学习Python并且已经开始做一些问题只是为了帮助提高我的技能,但是我非常坚持这个问题.

制作一个包含所有高达1000的正整数的列表,其正方形可以表示为两个正方形的和(i,例如,整数p,其中p ^ 2 = m ^ 2 + n ^ 2,其中m和n是整数大于0.)

提示:有几种方法.您可能会发现列出所有方形数字会很有帮助.in运算符可能很有用.

这是我到目前为止提出的代码:

    numbers=xrange(1001)
    numbers_squared=[x**2 for x in numbers]
    a=[]

    for x in numbers_squared:
        for b in numbers_squared:
            if (x+b)**.5 <= 1001:
                a.append(x+b)
    print a
Run Code Online (Sandbox Code Playgroud)

我得到的问题是Python需要数年才能完成这些计算(我等了大约十分钟,它仍在打印数字).任何关于如何解决这个问题的提示都将非常感激.

ps重点是使用列表.此外,提示将比解决方案本身更受欢迎.

谢谢!

pyd*_*ner 7

首先,你没有解决问题.您需要进行检查以确保(x+b)**.5实际上是一个整数.其次,如果您要打印数字,您已经计算出所有数字.执行上述操作将减少此步骤所需的时间.


jcr*_*jcr 2

列表理解怎么样?计算范围 (1,1011) 中的 c 范围 (1, c) 中的 b 范围 (1, b) 中的 a

如下:

x = [(a,b,c) for c in range(1,1001) for b in range(1, c) for a in range(1,b) if a**2+b**2==c**2]
print x 
Run Code Online (Sandbox Code Playgroud)

我已经对此进行了计时,在我的计算机上完成需要 46 秒