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

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

Problem 9 Special Pythagorean triplet

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

a 2 + b 2 = c 2 \large a^2+b^2=c^2a2+b2=c2

For example,

3 2 + 4 2 = 9 + 16 = 25 = 5 2 \large 3^2+4^2=9+16=25=5^232+42=9+16=25=52

There exists exactly one Pythagorean triplet for which a + b + c = 1000 a + b + c = 1000a+b+c=1000.

Find the product a b c abcabc.

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

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

a 2 + b 2 = c 2 \large a^2+b^2=c^2a2+b2=c2

例如:

3 2 + 4 2 = 9 + 16 = 25 = 5 2 \large 3^2+4^2=9+16=25=5^232+42=9+16=25=52

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

解题报告

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

毕达哥拉斯定理

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

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

思路

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

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

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

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

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

代码实现

/*
 * @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



相关文章
|
4月前
|
API
PTA-给定精度,求圆周率PI的近似值
给定精度,求圆周率PI的近似值
78 1
|
3月前
|
存储 算法
【洛谷 P1102】A-B 数对 题解(向量+lower_bound+upper_bound)
这是一个编程题目,要求计算给定正整数序列中满足 \( A - B = C \) 的数对个数。输入包含两行:正整数 \( N \) 和 \( C \),以及一串正整数。输出是满足条件的数对数量。使用排序和二分查找优化算法,代码中给出了 AC 解决方案。样例输入为 \( N=4, C=1 \),序列 \( 1, 1, 2, 3 \),输出为 \( 3 \)。数据范围:\( 1 \leq N \leq 2 \times 10^5 \),\( 0 \leq a_i &lt; 2^{30} \),\( 1 \leq C &lt; 2^{30} \)。
27 0
|
4月前
|
Java 编译器 C语言
learn_C_deep_12 (深度理解“取整“、“取余“、“取模“运算、掌握运算符优先级 )
learn_C_deep_12 (深度理解“取整“、“取余“、“取模“运算、掌握运算符优先级 )
learn_C_deep_12 (深度理解“取整“、“取余“、“取模“运算、掌握运算符优先级 )
(二维vector)(绝对值求和等式的处理)B. Playing in a Casino
(二维vector)(绝对值求和等式的处理)B. Playing in a Casino
83 0
【欧拉计划第 5 题】最小公倍数 Smallest multiple
【欧拉计划第 5 题】最小公倍数 Smallest multiple
148 0
【欧拉计划第 5 题】最小公倍数 Smallest multiple
|
Python
【欧拉计划第 13 题】 大数之和 Large sum
【欧拉计划第 13 题】 大数之和 Large sum
131 0
【欧拉计划第 13 题】 大数之和 Large sum
|
机器学习/深度学习
【欧拉计划第 6 题】和的平方与平方的和差值 Sum square difference
【欧拉计划第 6 题】和的平方与平方的和差值 Sum square difference
155 0
|
Java
HDOJ 1018 Big Number(大数位数公式)
HDOJ 1018 Big Number(大数位数公式)
107 0
HDOJ1021题 Fibonacci Again 应用求模公式
HDOJ1021题 Fibonacci Again 应用求模公式
119 0
|
算法 Python
动态规划法(三)子集和问题(Subset sum problem)
  继续讲故事~~   上次讲到我们的主人公丁丁,用神奇的动态规划法解决了杂货店老板的两个找零钱问题,得到了老板的肯定。之后,他就决心去大城市闯荡了,看一看外面更大的世界。
2444 1