2017年計算機等考二級c++:c++勾股數(shù)公式

字號:

勾股數(shù)公式為大家介紹了很喜歡研究數(shù)學,現(xiàn)在他就遇到一個有趣的問題,比如,直角三角形的周長是120的話,詳情請看以下內容:
    Roowe(沒見過這么BT的,拿自己名字去編題目)很喜歡研究數(shù)學,現(xiàn)在他就遇到一個有趣的問題,比如,直角三角形的周長是120的話,那么它的三條邊可以是20,48,52,或者24,45,51,還有30,40, 50,有三種不同的解,現(xiàn)在他想知道一個區(qū)間[a,b]中哪個數(shù)的解數(shù)最多(1<= a, b <= 1000000)?
    輸入
    10 100
    1000 100000
    1 1000000
    300000 700000
    100000 300000
    100000 700000
    800000 900000
    104 720720
    80 360360
    1 1000000
    輸出
    60 2
    55440 40
    720720 104
    360360 80
    240240 64
    360360 80
    831600 78
    720720 104
    360360 80
    720720 104
    讓我做下,本來懶得做的,但是他說打表就OK了,于是我就欣然答應了。。。奈何他眼中的打表難易度和我眼中不一樣,再次看到了數(shù)學系高材生和我的差距,嘿嘿。
    第一次嘗試,失敗。
    我說,不就是勾股定理a^2+b^2=c^2嗎?結果他說,你再去補補數(shù)學知識。。。。
    于是給了我一個鏈接,我一看,不就是百度百科的勾股數(shù)嗎,于是就暫時擱淺了。
    今晚第二次嘗試,仍然失敗。
    依稀記得昨天他給我說了有個什么勾股數(shù)公式,在百度百科那個勾股數(shù)的最下面介紹了,但是我看了半天,還是有點迷糊。
    然后讓他把代碼給我看看,好吧,結合百科介紹的勾股數(shù)公式,茅塞頓開。
    這里給出勾股數(shù)公式
    直角三角形三條邊a, b, c,其中a,b是直角邊。
    則 a=2*m*n
    b=m^2-n^2
    c=m^2+n^2
    當然,這是有前提條件的,也就是其局限性:“勾股數(shù)的公式還是有局限的。勾股數(shù)公式可以得到所有的基本勾股數(shù),但是不可能得到所有的派生勾股數(shù)。比如6,8,10;9,12,15…,就不能全部有公式計算出來”
    也就是說,3,4,5可以求出來,但是其倍數(shù)6,8,10就不行了。
    這里要注意幾個問題構成三角形的條件
    2*m*n+m^2-n^2 > m^2+n^2
    既m>n
    2.a, b, c互質,即無法得到派生的勾股數(shù)。