【欧拉计划第 9 题】特殊的毕达哥拉斯三元数 Special Pythagorean triplet

Problem 9 Special Pythagorean triplet

A Pythagorean triplet is a set of three natural numbers, $a < b < c$, for which,

$$
\large a^2+b^2=c^2
$$

For example,

$$
\large 3^2+4^2=9+16=25=5^2
$$

There exists exactly one Pythagorean triplet for which $a + b + c = 1000$.
Find the product $abc$.

问题 9 特殊的毕达哥拉斯三元数

毕达哥拉斯三元组是一组三个自然数的集合,且 $a < b < c$,其中

$$
\large a^2+b^2=c^2
$$

例如:

$$
\large 3^2+4^2=9+16=25=5^2
$$

恰好存在一个 $a + b + c = 1000$ 的毕达哥拉斯三元组,求积 $abc$

解题报告

题目中提到了毕达哥拉斯三元组,我们首先理解下其数学定义

毕达哥拉斯定理

在一个边长为 $a、b、c$ 的直角三角形中,$a²+b²=c²$。理想的情况是 $a、b、c$ 均为整数,则称为毕达哥拉斯三元数组

如题目中给出的例子,$3、4、5$ 就符合条件

思路

根据题目叙述,我们要满足 $a < b < c$ 和 $a²+b²=c²$ 的条件

那么只需要分别定义三个变量 $a、b、c$,分别给它们赋值为 $1、2、3$ 并符合比较关系,用来满足第一个条件

然后从变量 $c$ 开始,三层循环,最后一层中去判断 $a + b + c = 1000$ 和 $a²+b²=c²$ 条件

如果满足,则输出此时的乘积即为所求

这并不是唯一的解决方案,但是是我认为比较简单,最容易理解的一种

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*
* @Author: coder-jason
* @Date: 2022-04-17 13:04:36
* @LastEditTime: 2022-04-17 13:24:10
*/
#include <bits/stdc++.h>
using namespace std;

int main()
{
for (int c = 3; c < 1000; c++)
{
for (int b = 2; b < c; b++)
{
for (int a = 1; a < b; a++)
{
if ((a + b + c == 1000) && (a * a + b * b == c * c))
{
cout << a * b * c;
}
}
}
}
return 0;
}

答案:31875000