根據 Lagrange 的四平方和定理,每個正整數可以用四個完全平方數的和來表示。例如:
3 = 12 + 12 + 12 + 02
31 = 52 + 22 + 12 + 12
可是有些正整數可以用三個非負完全平方數的和來表示。例如:
3 = 12 + 12 + 12
17 = 02 + 12 + 42
給你一個整數 K 請你以三個平方數的和來表示,或是證明這是不可能的。
本題為 LeetCode - 279
本題解法 大都是使用 Loop 建立 陣列方式建立查表
t=int(input())
strn=[-1]*50001
for i in range(255):
for j in range(i,255):
for k in range(j,255):
if((i*i+j*j+k*k)>50000):
break
if(strn[i*i+j*j+k*k]==-1):
strn[i*i+j*j+k*k]=(str(i)+" "+str(j)+" "+str(k))
ans=[-1]*t
for z in range(0,t):
ans[z]=int(input())
for z in range(0,t):
print(strn[ans[z]])
但是如果依照全國比賽規定 值要在 1 ≤ 𝑥 ≤ 10^6
這樣值會掛了
即使 第一名 也是同樣這個解法
import itertools
for _ in range(int(input())):
n=int(input())
sp=int(n**0.5)
lst=[i for i in range(sp+1)]
l=[]
for i in list(itertools.combinations_with_replacement(lst,3)):
if i[0]**2+i[1]**2+i[2]**2==n:
l.append(i)
if l==[]:print(-1)
else:print(*(l[0]))