我們知道,與前三個正整數(一個< b < c),如果它是三角形的三條邊被稱爲畢達哥拉斯三重。如何創建更快勾股數?
給出一個整數。如何快速找到剩餘的兩個畢達哥拉斯。
但是,如果有多個答案,輸出B,C最大。
例如:
輸入
輸出
(9,12,15),(9,40, 41)有2個答案。但是是最準確的(9,40,41)。
我不知道如何解決的優化。請幫幫我。 非常感謝。
我們知道,與前三個正整數(一個< b < c),如果它是三角形的三條邊被稱爲畢達哥拉斯三重。如何創建更快勾股數?
給出一個整數。如何快速找到剩餘的兩個畢達哥拉斯。
但是,如果有多個答案,輸出B,C最大。
例如:
輸入
輸出
(9,12,15),(9,40, 41)有2個答案。但是是最準確的(9,40,41)。
我不知道如何解決的優化。請幫幫我。 非常感謝。
由於
a² = c²-b²=(c-b)*(c+b)
你可以從最小到最大嘗試a²
的因素,b
,c
是最大的,如果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
你是對的。因式分解爲「2 *(a²/ 2)」。 – LutzL
這也許應該去上數學交流,但這裏有一個提示 - 重新構想的問題,因爲找到兩個平方差爲一個與給定數量的平方。這將爲您提供'b'附近有限的一組數字,其中'c'必須位於。這大大減少了搜索空間。除此之外,這可能只是蠻力,而是在一個較小的問題空間。不過,爲其他附近的條目建立一個正方形和不同的表格可能會有所幫助。 – twalberg
歡迎來到StackOverflow。你能否向我們展示任何代碼,即使它沒有優化?對於這個網站來說,這是一個很好的問題。請參閱[常見問題](http://stackoverflow.com/tour)和[如何提問](http://stackoverflow.com/help/how-to-ask)。 –
http://meta.softwareengineering.stackexchange.com/questions/6166/open-letter-to-students-with-homework-problems – EJoshuaS