【問題描述】
已知m、n為整數,且滿足下列兩個條件:
① m、n∈{1,2,…,k},即1≤m,n≤k,(1≤k≤109)。
②(n2-m*n-m2)2=1
你的任務是:程式設計輸入正整數k,求一組滿足上述兩個條件的m、n,并且使m2+n2的值最大。例如,從鍵盤輸入k=1995,則輸出:m=987 n=1597。
【輸入樣例】
1995
【輸出樣例】
m=987
n=1597
代碼如下:
View Code
批注:該算法确實挺好,簡潔、高效率,但是有一個問題比較明顯,那就是當k的值達到10^9時,for循環内,m從k開始向1周遊。當m的值取10^9時,計算delt的時候,m^2會溢出。而且并非隻有當k達到10^9才會有這個問題,當k達到10^5時就會出現這個問題。想要自己寫一個函數去實作高精度數的開平方根,似乎也不是這麼容易。是以,可以看看下面的遞推算法。
标準答案是:
批注:一開始閱讀該算法,實在無法了解為何會是跟斐波那契數列一樣的規律。後來查資料,閱讀了解,終于看懂。下面做一個記錄。