C++ 中的毕达哥拉斯四元组

2025年5月10日 | 阅读 4 分钟

确定这四个点是否构成勾股四元组。它的定义是整数 a、b、c 和 d 的一个元组,满足 d2 = a2 + b2 + c2。本质上,它们是丢番图方程的解。在几何解释中,它象征着一个长方体,其整数边长为 |a|、|b| 和 |c|,空间对角线为 |d|。

勾股四元组 (2, 3, 6, 7) 可以表示为 (22 + 32 +62) = (4 + 9 + 36) = (49) = (72)。并非所有四组正整数都是勾股四元组,因为它们必须满足勾股方程。勾股四元组已应用于数论,并可用于在数学中创建有趣的模式。

算法

  • 数字向量应按非降序排序。
  • 确定最初三个数字的平方和。
  • 应计算第四个数字的平方。
  • 验证从第二步和第三步获得的结果是否相等。
  • 显示解决方案。

伪代码

  • 将 squareSum 设置为初始值。
  • a2+ b2 + c2 = squareSum
  • 返回 (squareSum == d2)

示例 1

让我们举一个例子来说明 C++ 中的勾股四元组

输出

The numbers form a Pythagorean Quadruplet.

示例 2

让我们再举一个例子来说明 C++ 中的勾股四元组

输出

Enter the range to search for Pythagorean quadruples: 15
(1, 2, 2, 3)
(1, 4, 8, 9)
(2, 3, 6, 7)
(2, 4, 4, 6)
(2, 5, 14, 15)
(2, 6, 9, 11)
(2, 10, 11, 15)
(3, 4, 12, 13)
(3, 6, 6, 9)
(4, 4, 7, 9)
(4, 6, 12, 14)
(4, 8, 8, 12)
(5, 10, 10, 15)
(6, 6, 7, 11)

复杂度分析

时间复杂度

时间复杂度为O(1),因为它执行固定数量的操作。函数is_pythagorean_quadruplet() 使用三个常数时间操作计算 squareSum 并测试它与第四个元素平方的相等性。

在最坏的情况下,排序函数的时间复杂度为O(nlog(n))。因此,代码的总体时间复杂度应为O(nlog(n)),其中 n 是向量的元素计数。但是,由于向量的大小始终设置为 4,因此排序函数的时间复杂度保持不变。

空间复杂度

空间复杂度为 O(1)。这是因为存储输入向量所需的最小空间量为 4。由于代码的实现不需要额外的空间,因此空间复杂度可以视为常数。

结论

总之,勾股定理指出第四个数字的平方等于前三个数字的平方和。满足此条件的四组整数称为勾股四元组。如果一组数字不构成勾股四元组,则可以使用提供的 C++ 代码进行高效验证。代码使用排序算法和基本算术运算系统地评估勾股定理的条件,展示了对数学概念的透彻理解。通过将功能精简为一个函数并遵循既定的编码约定,代码简化了集成并优先考虑了可读性。