【题解】T156527 直角三角形


题目链接:T156527 直角三角形

审题

根据勾股定理,\(a^2 + b^2 == c^2\)

当然,由于勾股定理不在小学数学考查的的范围内,我们需要对勾股定理进行一些证明,让小学生能够轻松地做出此题。

勾股定理的证明

赵爽弦图

这个↑,就是传说中的“赵爽弦图”。

赵爽(?-?),一名婴,字君卿,是中国在三国时期吴国的数学家。生卒年不详,是否生活在三国时代其实也受质疑,著有《周髀算经注》,即对《周髀算经》的详细注释。

“勾股各自乘,并之,为弦实。开方除之,即弦。”

                  ——赵爽《勾股圆方图说》

“按弦图,又可以勾股相乘为朱实二,倍之为朱实四,以勾股之差自相乘为中黄实,加差实,亦成弦实。”

                  ——赵爽《勾股圆方图说》

语文好的同学,可以直接看下一个证明方法了。

在这张途中,正方形ABDE以弦为边长,由4个相等的直角三角形再加上中间的那个小正方形组成。

不妨设 \(AE = BF = CG = DH = a\)\(BE = CF = DG = AH = b\)\(AB = BC = CD = DA = c\)

那么,

\(S_{\text {正方形}EFGH} = (b - a)^2\)

\(S_{\text {△}AEB} = S_{\text {△}BFC} = S_{\text {△}CGD} = S_{\text {△}DHA} = \frac {a \times b} {2}\)

\(4S_{\text {△}} = 2ab\)

\(∴S_{\text{正方形}ABCD} = 4S_{\text {△}} + S_{\text{正方形}EFGH} = (b - a)^2 + 2ab = a^2 - 2ab + b^2 + 2ab = a^2 + b^2\)

\(\text{∵} S_{\text{正方形}ABCD} = c^2\)

\(\text{∴}a^2 + b^2 = c^2\)

证毕。

青朱出入图

没错就是这个,上面那张图多看几遍就会恍然大悟。

刘徽(约225年-约295年),山东淄博淄川人,三国时代魏国数学家,梁敬王刘定国之孙菑乡侯刘逢喜的后裔。

青朱出入图,是东汉末年数学家刘徽根据“割补术”运用数形关系证明勾股定理的几何证明法,其法富有东方智慧(?莫名想起这个),特色鲜明、通俗易懂。

利用相似三角形的证法

有许多勾股定理的证明方式,都是基于相似三角形中两边长的比例。

\({\displaystyle ABC}\) 为一直角三角形,直角于 \({\displaystyle \angle C}\)(看右图)。从点 \({\displaystyle C}\) 画上三角形的高,并将此高与 \({\displaystyle {\overline {AB}}}\) 的交叉点称之为 \({\displaystyle H}\)。此新 \({\displaystyle \bigtriangleup ACH}\) 和原本的 \({\displaystyle \bigtriangleup ABC}\) 相似,因为在两个三角形中都有一个直角(这又是由于“高”的定义),而两个三角形都有 \({\displaystyle A}\) 这个共同角,由此可知第三只角都是相等的。同样道理,\({\displaystyle \bigtriangleup CBH}\)\({\displaystyle \bigtriangleup ABC}\) 也是相似的。这些相似关系衍生出以下的比率关系:

因为

\({\displaystyle {\overline {BC}}=a,{\overline {AC}}=b,{\mbox{ and }}{\overline {AB}}=c,\!}\)
所以

\({\displaystyle {\frac {a}{c}}={\frac {\overline {HB}}{a}}{\mbox{ and }}{\frac {b}{c}}={\frac {\overline {AH}}{b}}.\,}\)
可以写成

\({\displaystyle a^{2}=c\times {\overline {HB}}{\mbox{ and }}b^{2}=c\times {\overline {AH}}.\,}\)
综合这两个方程,我们得到

\({\displaystyle a^{2}+b^{2}=c\times {\overline {HB}}+c\times {\overline {AH}}=c\times ({\overline {HB}}+{\overline {AH}})=c^{2}.\,\!}\)
换句话说:

\({\displaystyle a^{2}+b^{2}=c^{2}.\,\!}a^2+b^2=c^2.\,\!\)

欧几里得的证法

在定理的证明中,我们需要如下四个辅助定理:

  • SAS(如果两个三角形有两组对应边和这两组边所夹的角相等,则两三角形全等。)

  • 三角形面积是任一同底同高之平行四边形面积的一半。

  • 任意一个正方形的面积等于其二边长的乘积。

  • 任意一个矩形的面积等于其二边长的乘积。

其中3、4两个定理小学已经讲过了,这里不再赘述。

为了证明勾股定理,我们首先证明SAS。

由几何直观可得:如果两个三角形有两组对应边和这两组边所夹的角相等,则两三角形全等。

证毕。

好吧,SAS是一个公理(依据人类理性的不证自明的基本事实<来自百度百科>)。

下面是欧几里得对于勾股定理的证明。

  1. \({\displaystyle \triangle ABC}\) 为一直角三角形,其直角为 \({\displaystyle \angle CAB}\)
  2. 其边为 \({\displaystyle {\overline {BC}}}\)\({\displaystyle {\overline {AB}}}\)、和 \({\displaystyle {\overline {CA}}}\),依序绘成四方形 \({\displaystyle CBDE}\)\({\displaystyle BAGF}\)\({\displaystyle ACIH}\)
  3. 画出过点 \({\displaystyle A}\)\({\displaystyle {\overline {BD}}}\)\({\displaystyle {\overline {CE}}}\)的平行线。此线将分别与 \({\displaystyle {\overline {BC}}}\)\({\displaystyle {\overline {DE}}}\) 直角相交于 \({\displaystyle K}\)\({\displaystyle L}\)
  4. 分别连接 \({\displaystyle {\overline {CF}}}\)\({\displaystyle {\overline {AD}}}\),形成两个三角形 \({\displaystyle BCF}\)\({\displaystyle BDA}\)
  5. \({\displaystyle \angle CAB}\)\({\displaystyle \angle BAG}\) 都是直角,因此 \({\displaystyle C}\)\({\displaystyle A}\)\({\displaystyle G}\)都是共线的,同理可证 \({\displaystyle B}\)\({\displaystyle A}\)\({\displaystyle H}\)共线。
  6. \({\displaystyle \angle CBD}\)\({\displaystyle \angle FBA}\) 皆为直角,所以 \({\displaystyle \angle ABD}\) 相等于 \({\displaystyle \angle FBC}\)
  7. 因为\({\displaystyle {\overline {AB}}}\)\({\displaystyle {\overline {BD}}}\) 分别等于 \({\displaystyle {\overline {FB}}}\)\({\displaystyle {\overline {BC}}}\),所以 \({\displaystyle \triangle ABD}\) 必须全等于 \({\displaystyle \triangle FBC}\)
  8. 因为 \({\displaystyle A}\)\({\displaystyle K}\)\({\displaystyle L}\) 在同一直线上,所以四方形 \({\displaystyle BDLK}\) 必须二倍面积于 \({\displaystyle \triangle ABD}\)
  9. 因为 \({\displaystyle C}\)\({\displaystyle A}\)\({\displaystyle G}\) 在同一直线上,所以正方形 \({\displaystyle BAGF}\) 必须二倍面积于 \({\displaystyle \triangle FBC}\)
  10. 因此四边形 \({\displaystyle BDLK}\) 必须和 \({\displaystyle BAGF}\) 有相同的面积=\({\displaystyle {\overline {AB}}^{2}}\)
  11. 同理可证,四边形 \({\displaystyle CKLE}\) 必须有相同的面积 \({\displaystyle ACIH={\overline {AC}}^{2}}\)
  12. 把这两个结果相加,\({\displaystyle {\overline {AB}}^{2}+{\overline {AC}}^{2}={\overline {BD}}\times {\overline {BK}}+{\overline {KL}}\times {\overline {KC}}}\)
  13. 由于 \({\displaystyle {\overline {BD}}={\overline {KL}}}{\displaystyle {\overline {BD}}={\overline {KL}}},{\displaystyle {\overline {BD}}\times {\overline {BK}}+{\overline {KL}}\times {\overline {KC}}={\overline {BD}}\left({\overline {BK}}+{\overline {KC}}\right)={\overline {BD}}\times {\overline {BC}}}\)
  14. 由于 \({\displaystyle CBDE}\) 是个正方形,因此 \({\displaystyle {\overline {AB}}^{2}+{\overline {AC}}^{2}={\overline {BC}}^{2}}{\displaystyle {\overline {AB}}^{2}+{\overline {AC}}^{2}={\overline {BC}}^{2}}\)

欧几里得(希腊语:Ευκλειδη?,古希腊语:Ε?κλε?δη?,前325年-前265年),有时被称为亚历山大里亚的欧几里得,以便区别于墨伽拉的欧几里得。希腊化时代的数学家,被称为“几何学之父”。他活跃于托勒密一世时期的亚历山大里亚,也是亚历山太学派的成员。他在著作《几何原本》中提出五大公设,成为欧洲数学的基础。欧几里得也写过一些关于透视、圆锥曲线、球面几何学及数论的作品。欧几里得几何被广泛的认为是数学领域的经典之作。

图形重新排列证法

此证明以图形重新排列证明。两个大正方形的面积皆为 \({\displaystyle (a+b)^{2}}\)。把四个相等的三角形移除后,左方余下面积为 \({\displaystyle a^{2}+b^{2}}\),右方余下面积为 \({\displaystyle c^{2}}\),两者相等。证毕。

总统证法

证明:\(\text{∵}S_{\text {梯形}ABCD} = \frac {1} {2} (a + b)^2 = \frac {1} {2} (a^2 + 2ab + b^2)\)

  又\(\text{∵}S_{\text {梯形}ABCD} = S_{\text{△}AED} + S_{\text{△}EBC} + S_{\text{△}DEC} = \frac {1} {2}ab + \frac {1} {2}ba + \frac {1} {2}c = \frac {1} {2}(2ab + c^2)\)

   \(\text {∴}c^2 = a^2 + b^2\)

证毕。

詹姆斯·艾伯拉姆·伽菲尔德(英语:James Abram Garfield,1831年11月19日—1881年9月19日),美国政治家数学家,生于俄亥俄州。美国共和党人。南北战争期间加入北方军队,与南方奴隶制军队作战,拥有少将军衔。1880年加菲尔德当选为第20任总统,他是美国首位具有神职人员身份的总统。就职仅4个月即遭暗杀,是美国第二位被暗杀的总统。他在数学方面的贡献主要是在勾股定理的证明方面的新成就,他也是美国历史上唯一一位数学家出身的总统。他的第一夫人是卢克丽霞·鲁道夫,育有五子二女。

代码

相信你们看完了以上的证明已经对勾股定理有了初步的了解。那么,现在我们就可以开始写代码了:

#include 
using namespace std;

int main() {
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (i * i + j * j == n * n) {
        cout << i << ' ' << j << endl;
        return 0;
      }
}

这份已经是AC的代码了,如果让它运行得更快一点的话,可以稍稍地做一点优化。

为了让 \(a\),也就是 \(i\) 最小,\(a\) 肯定小于 \(b\)。所以可以让 \(j\)\(i\) 开始循环。代码如下:

#include 
using namespace std;

int main() {
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (i * i + j * j == n * n) {
        cout << i << ' ' << j << endl;
        return 0;
      }
}

第一份代码运行了121ms,第二份运行了113ms。所以,我们要想办法优化自己的程序,使自己的程序加快不到10ms。

评价

此题涉及如此多的数学知识,建议至少评蓝。

相关