目录

1925:统计平方和三元组的数目(1323 分)

力扣第 56 场双周赛第 1 题

题目

一个 平方和三元组 (a,b,c) 指的是满足 a2 + b2 = c2 的 整数 三元组 ab 和 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

相似问题:

分析

#1

最简单的就是两重遍历 a 和 b

1
2
3
4
5
6
7
8
9
class Solution:
    def countTriples(self, n: int) -> int:
        res = 0
        for a in range(1,n+1):
            for b in range(1,n+1):
                c = isqrt(a*a+b*b+1)
                if c<=n and c*c==a*a+b*b:
                    res += 1
        return res

219 ms

#2

解答

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class Solution:
    def countTriples(self, n: int) -> int:
        res = 0
        u = 3
        while u*u<=n*2:
            v = 1
            while v<u and u*u+v*v<=n*2:
                if gcd(v,u)==1:
                    res += n*2//(u*u+v*v)
                v += 2
            u += 2
        return res*2

0 ms