#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 分支)来检查它们是否满足勾股定理。
-
循环结构:通常需要三层循环。 ◦ 外层循环遍历 a (从 1 到 n )。
◦ 中层循环遍历 b (从 a 到 n ,确保 b \geq a )。
◦ 内层循环遍历 c (从 b 到 n ,确保 c \geq b )。
-
条件判断:在最内层循环中,判断 a^2 + b^2 是否等于 c^2 。
-
优化思考:这是考察的重点之一。你可以思考,是否必须使用三层循环?能否通过数学关系(例如,已知 a 和 b ,直接计算出 c = \sqrt{a^2 + b^2} )来减少一层循环?这对于处理较大的 n 值至关重要。