2017-02-03 83 views
-1

我們知道,與前三個正整數(一個< b < c),如果它是三角形的三條邊被稱爲畢達哥拉斯三重。如何創建更快勾股數?

給出一個整數。如何快速找到剩餘的兩個畢達哥拉斯。

但是,如果有多個答案,輸出B,C最大。

例如

輸入

輸出

(9,12,15),(9,40, 41)有2個答案。但是是最準確的(9,40,41)。

我不知道如何解決的優化。請幫幫我。 非常感謝。

+0

這也許應該去上數學交流,但這裏有一個提示 - 重新構想的問題,因爲找到兩個平方差爲一個與給定數量的平方。這將爲您提供'b'附近有限的一組數字,其中'c'必須位於。這大大減少了搜索空間。除此之外,這可能只是蠻力,而是在一個較小的問題空間。不過,爲其他附近的條目建立一個正方形和不同的表格可能會有所幫助。 – twalberg

+0

歡迎來到StackOverflow。你能否向我們展示任何代碼,即使它沒有優化?對於這個網站來說,這是一個很好的問題。請參閱[常見問題](http://stackoverflow.com/tour)和[如何提問](http://stackoverflow.com/help/how-to-ask)。 –

+1

http://meta.softwareengineering.stackexchange.com/questions/6166/open-letter-to-students-with-homework-problems – EJoshuaS

回答

0

由於

a² = c²-b²=(c-b)*(c+b) 

你可以從最小到最大嘗試的因素,bc是最大的,如果b+c是最大的,因此如果c-b是最小的。對於奇數a,人們很容易看到

c = (a²+1)/2 
b = (a²-1)/2 

給出具有所需屬性的整數。對於連a,最小的可行因素,其中兩個因素的總和,甚至就是2,導致

c = (a²+4)/4 
b = (a²-4)/4 

這個簡單的公式,甚至有一個古老的名字:The Platonic sequence

+0

你是對的。因式分解爲「2 *(a²/ 2)」。 – LutzL