#GESP2MN01. 【GESP二级模拟题】勾股数计数

【GESP二级模拟题】勾股数计数

题目描述

给定一个正整数 n ,请你计算所有满足 1≤a≤b≤c≤n 且 a^2 + b^2 = c^2 的勾股数三元组 ( (a, b, c) ) 的组数。

输入格式

输入一行,包含一个正整数 n 。

输出格式

输出一行,包含一个整数 C ,表示满足条件的勾股数组数。

样例输入

5

样例输出

1

样例解释

当 n = 5 时,唯一满足条件的勾股数是(3, 4, 5),因为 3^2 + 4^2 = 5^2 且 c = 5≤5 ,所以输出为 1。

数据规模与约定

对于 100% 的数据,1≤n≤1000 。

解题思路与分析

这道题的核心是使用嵌套循环来枚举所有可能的三元组 ( (a, b, c) ),并利用条件判断(即 if 分支)来检查它们是否满足勾股定理。

  1. 循环结构:通常需要三层循环。 ◦ 外层循环遍历 a (从 1 到 n )。

    ◦ 中层循环遍历 b (从 a 到 n ,确保 b \geq a )。

    ◦ 内层循环遍历 c (从 b 到 n ,确保 c \geq b )。

  2. 条件判断:在最内层循环中,判断 a^2 + b^2 是否等于 c^2 。

  3. 优化思考:这是考察的重点之一。你可以思考,是否必须使用三层循环?能否通过数学关系(例如,已知 a 和 b ,直接计算出 c = \sqrt{a^2 + b^2} )来减少一层循环?这对于处理较大的 n 值至关重要。