题目描述
给定一个整数 $N$,你需要找出所有满足以下条件的元组 $(a, b, c)$:
- $a^2 + b^2 = c^2$,即 $a, b, c$ 构成一个勾股数元组。
- $a \leq b \leq c$
- $a, b, c$ 都是正整数。
- $a \leq N$
输出所有满足条件的勾股数元组 $(a, b, c)$,每个元组占一行,按 $a$ 升序排列,如果 $a$ 相同,按 $b$ 升序排列。
输入
输入一行包含一个整数 $N$。
输出
输出所有满足条件的勾股数元组 $(a, b, c)$,每个元组占一行,按题目要求的顺序排列。
思路
- 暴力枚举法:我们可以枚举所有 $a \leq N$ 的正整数,对于每个 $a$,再枚举 $b$($a \leq b \leq \sqrt{N^2 - a^2}$),检查是否存在 $c = \sqrt{a^2 + b^2}$,且 $c$ 为整数。这种方法的时间复杂度较高,但对于 $N$ 不是非常大的情况下是可行的。
- 数学优化:根据勾股数的生成公式,我们知道所有勾股数 $(a, b, c)$ 可以表示为:
- $a = m^2 - n^2$
- $b = 2mn$
- $c = m^2 + n^2$ 其中 $m > n > 0$ 且 $m$ 和 $n$ 互质,且 $m$ 和 $n$ 有一个是奇数,一个是偶数。
使用这种方法可以大大减少计算量,因为我们只需要枚举 $m$ 和 $n$,然后计算 $a, b, c$,并检查 $a$ 是否满足 $a \leq N$。

最低0.47元/天 解锁文章
574

被折叠的 条评论
为什么被折叠?



