一.問題描述
如果直角三角形三條邊長均為整數,這三個整數組成的陣列就稱為勾股陣列,對於勾股陣列(a,b,c),根據定理有關係式:a^2 + b^2=c^2
問題: 有一種勾股陣列(a,b,c),使得b=a+1.例如: 3^2+4^2=5^2;
用程式找出指定範圍(1二. 分析
1.遍歷求解:這類演算法最簡單,也最耗時.兩個遍歷條件得到結果的演算法複雜度是0(n^2),顯然這不是好演算法.
2.遞迴演算法:
設 a,b,c為一組勾股數, 設 m= c--a,有 a^2+(a+1)^2=(a+m)^2;
視m 為常數,解得: a= m--1+sqrt(2*m*(m-1))
因a是整數,故2*m*(m-1)是完全平方數,有整數n>=0,使得:
2*m*(m-1)=(m+n)^2; 1
解m得:
m ==n+1+sqrt((n+1)^2+n^2);
因為m是整數,故(n+1)^2+n^2是完全平方數.
當n=0時,代入得到a=3,b=4,c ==5.
當n<>0時,n,n+1,sqrt((n+1)^2+n^2)構成一組勾股數.
可見,除3,4,5外,所有其他勾股陣列均可逆向使用上述公式,由另一組比較小的勾股數推出.
由 1 得: m^2 =n^2 +2m+2mn
2m(m-1) = n^2+m^2+2mn=(m+n)^2.
所以: a = m-1+n+m=n+2*m-1=n + 2*b(n) +2*c(n) --1;
總結遞推公式如下:
a(0)=3
b(0)=4
c(0)=5
a(n+1) = a(n) +2*b(n) +2*c(n) -1
b(n+1)=a(n+1) +1;
c(n+1)=a(n+1) +b(n) +c(n)
勾股數問題
一.問題描述 如果直角三角形三條邊長均為整數,這三個整數組成的陣列就稱為勾股陣列,對於勾股陣列 a,b,c 根據定理有關係式 a 2 b 2 c 2 問題 有一種勾股陣列 a,b,c 使得b a 1.例如 3 2 4 2 5 2 用程式找出指定範圍 1二.分析 1.遍歷求解 這類演算法最簡單,也最耗...
勾股數定理
一 勾股數 形如 一類的數稱為勾股數 a,b,c為正整數 x 2 y 2 z 2 二 一些性質 1.直角三角形的兩條直角邊和斜邊滿足勾股數定理。2.a b c,a b3.當a為奇數時,a 2n 1,則 b 2n 2 2n a 1 2 2 a 1 c b 1 4.當a為偶數時,a 2n,則 b n 2...
C 求勾股數
問題 求1 100可以構成勾股數的數。勾股定理 a b c 演算法思想 使用遍歷窮舉的方法。需要注意的是為了避免出現5 12 13和12 5 13這種情況,遍歷第二個輸的時候要比第乙個數大。c using system using system.collections.generic using s...