鏈接:
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1207
問題描述是:給定一個大于0的整數
N(1<=N<=10^8),判斷其是否可能是一個直角三角形的直角邊(這個三角形的三條邊必須都是整數)...
這個題還是做得我挺郁悶的。。。剛開始完全沒思路。。。后面沒辦法,硬著頭皮往下想,對于勾股定理a^2 + b^2 = c^2,假設N是a,
可以得到a^2 = (c + b) * (c -b), 那么(c+b)和(c-b)是a^2的2個因子,而且(c+b)>=a,(c-b)<=a。。。
到這一步已經可以用程序輕松解決出來了,但是對于任意一個整數N來說,其復雜度都是O(N),那么計算量還是很大的...
這個時候只需要枚舉1-N,求出a^2的2個因子,然后求c和b,如果能得出c和b都是正整數那么,就滿足條件了...
但是這樣還是過不了題,因為數據量不會這么小...數據量好像有
10000組。。。
那么還需要推導出進一步的結論...
因為1和a^2一定是a^2的一對因子,那么(c+b) = a^2和(c-b) = 1一定可以成功,
則可以推導出,2*c = a^2 + 1;
要c可解,a必須為奇數,那么可以推導出如果a是奇數,一定是直角邊了。。。
如果a是偶數了,可以化簡為4*(a/2)^2 = 4*(c+b)*(c-b) = (2c+2b)*(2c-2b) = a^2,那么繼續推導也可以得到一樣的結果了...
結論就是:對于大于等于3的正整數都可以是一條直角邊(>=3也可以根據上面的c和b是正整數推導出來)...