方程解集 python

equation Solution Set in python

我有一个问题,我应该编写一个程序来求解这个方程

a2 + b2 + c2 = d

并在 Lexicographical order 中对解决方案进行排序,顺序没有生成,如果没有解决方案打印 -1 所以我编写我的代码并使用三个嵌套循环

d=int(raw_input())
p=0
for a in range(d+1):
    a
    for b in range(d+1):
        b
        for c in range(d+1):
            c
           if a**2+b**2+c**2==d:
                 p=1
                 print a,b,c
                 break
if p==0:
    print -1

我的问题超出了时间限制 输入范围是 10^5 简单的输入和输出要清楚

6

输出

1 1 2
1 2 1
2 1 1

有什么想法可以避免该时间限制吗?

请注意,您的 break 语句仅从最内层的 for 循环中中断。 您可能想为此使用 p 并在每个 for 循环的末尾进行检查,即(未检查...):

d=int(raw_input())
p=0
for a in range(d+1):
    a
    for b in range(d+1):
        b
        for c in range(d+1):
            c
           if a**2+b**2+c**2==d:
                 p=1
                 lst =  [a,b,c]
                 lst.sort() 
                 for num in lst:
                    print num,
                 break
        if p==1:
            break
    if p==1:
        break

if p==0:
    print -1