勾股數問題

2021-04-06 19:59:37 字數 904 閱讀 2603

一.問題描述

如果直角三角形三條邊長均為整數,這三個整數組成的陣列就稱為勾股陣列,對於勾股陣列(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...