2013-03-11 148 views
5

早上好,我是新來的,我帶來一個小問題。我無法爲以下問題開發高效的算法: 我需要找到三個正數x,y和z的組合,以便x + y,x-y,y + z,y-z,x + z和x - z是完美的正方形。 問題是要開發一種算法,找到1 和2,000,000之間的x,y和z的所有組合。三個正數x,y,z的組合使x + y,x-y,y + z,y-z,x + z和x-z爲完美正方形

目前我在for之內使用for,在我有孫子之前,這肯定不會結束。

+0

加快孫子們的收購,可能是一個有趣的方式來解決這個問題)+1爲好問題 – kostja 2013-03-11 13:04:03

+3

是約束,1 2013-03-11 13:28:07

+1

它可能有助於某些情況下[每個廣場是兩個連續的三角形數字的總和](http://www.jstor.org/discover/10.2307/3621134?uid=3739728&uid=2&uid=4&uid=3739256&sid=21101806678781 )(儘管這當然不意味着只有三角形數字和平方和)。 – 2013-03-11 13:35:51

回答

4

基本思想開始與取代,如:

u = x + y 
v = x - y 
w = y + z 

那麼x + Y,X - Y,Y + Z,Y - Z,X + Z和X - z變爲

u, v, w, u - v - w, v + w, u - w [all have to be squares] 
與其他替代,U =A²,v =稱b²,W =C²

然後,您可以:

a², b², c², a² - b² - c², b² + c², a² - c² [all have to be squares] 

現在你可以列舉所有A,b,CS這可能已經是快è nough。

更進一步的想法可能是首先使用Pythagorean triples(通過將其代入m和n,枚舉所有coprime(m,n),然後使用Euclid公式來枚舉所有b²,c²,b²+c²,然後查找給定的b,c)以類似的方式(例如,將a² - c²=x²更改爲a²=x²+c²並再次使用三元組)。

+0

所以我開始尋找最終的X,然後找到答案表達式X + Y是一個完美的正方形(不管結果是在範圍內還是與其他結果不同),X - Y是完美的廣場。有「X」和「Y」尋找「Z」,和其他表達式實現,直到你找到一個有效的組合和存儲或打印。 BeniBela 「的基本理念,開始了替代,如: U = X + Y V =說明X - Y W = Y + Z」 似乎是一個好主意,我會盡力與工作。謝謝 – user2156850 2013-03-11 13:56:56

0

擴展BeniBela's answer

x + y = (x - z) + (y + z) 
x + y = (x + z) + (y - z) 

所以,三胞胎只有當斜邊可以以兩種不同的形式來表示有效。 進一步的過濾可以通過觀察(x-z)和(x + z)也形成畢達哥拉斯三元組的斜邊來完成。

相關問題