Welcome 歡迎光臨! 愛上網路-原本退步是向前 !

113商業類程式設計-四平方和

根據 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]))

 

[ Python ] 瀏覽次數 : 62 更新日期 : 2025/01/06