1925-统计平方和三元组的数目
一个 平方和三元组 (a,b,c)
指的是满足 a2 + b2 = c2
的 整数 三元组 a
,b
和 c
。
给你一个整数 n
,请你返回满足 __1 <= a, b, c <= n
的 平方和三元组 的数目。
示例 1:
**输入:** n = 5
**输出:** 2
**解释:** 平方和三元组为 (3,4,5) 和 (4,3,5) 。
示例 2:
**输入:** n = 10
**输出:** 4
**解释:** 平方和三元组为 (3,4,5),(4,3,5),(6,8,10) 和 (8,6,10) 。
提示:
1 <= n <= 250
方法一:枚举
思路与算法
我们可以枚举整数三元组 (a, b, c) 中的 a 和 b,并判断 a^2 + b^2 是否为完全平方数,且 \sqrt{a^2 + b^2 是否为不大于 n 的整数。
我们可以对 a^2 + b^2 开平方,计算 \left\lfloor \sqrt{a^2 + b^2} \right\rfloor^2 是否等于 a^2 + b^2 以判断 a^2 + b^2 是为完全平方数。同时,我们还需要判断 \left\lfloor \sqrt{a^2 + b^2} \right\rfloor 是否不大于 n。
在遍历枚举的同时,我们维护平方和三元组的数目,如果符合要求,我们将计数加 1。最终,我们返回该数目作为答案。
细节
在计算 \left\lfloor \sqrt{a^2 + b^2} \right\rfloor 时,为了防止浮点数造成的潜在误差,同时考虑到完全平方正数之间的距离一定大于 1,的我们可以用 \sqrt{a^2 + b^2 + 1 来替代 \sqrt{a^2 + b^2。
代码
1 | class Solution { |
1 | from math import sqrt |
复杂度分析
时间复杂度:O(n^2),其中 n 为三元组元素的上界。即为遍历 a 与 b 的时间复杂度。
空间复杂度:O(1)。
Comments