题目解析
* 输入输出:输入一个整数 nnn;输出满足条件的不同直角三角形数量,其中直角边长 a,ba, ba,b 均为不超过 nnn 的正整数,且两直角边无序(即 (a,b)(a,b)(a,b) 与 (b,a)(b,a)(b,a) 视为同一种)。
* 数据范围:1≤n≤10001 \leq n \leq 10001≤n≤1000,规模允许 O(n2)O(n^2)O(n2) 枚举。
* 复杂度要求:时间复杂度 O(n2)O(n^2)O(n2),空间复杂度 O(1)O(1)O(1)。
* 算法知识点:数学、枚举、奇偶性分析、去重策略
思路解析
1. 面积整数条件:直角三角形面积 S=a×b2S = \frac{a \times b}{2}S=2a×b 。要使 SSS 为整数,必须满足 a×ba \times ba×b 为偶数,即 aaa 和 bbb 中至少有一个是偶数(若两者均为奇数,则乘积为奇数,面积为半整数)。
2. 去重策略:题目规定 (a,b)(a,b)(a,b) 与 (b,a)(b,a)(b,a) 视为相同的三角形。为避免重复计数,在枚举时强制规定 a≤ba \leq ba≤b(代码中体现为内层循环 jjj 从 iii 开始),这样每个无序数对仅被统计一次。
3. 枚举统计:使用双重循环遍历所有满足 1≤i≤j≤n1 \leq i \leq j \leq n1≤i≤j≤n 的无序对,判断 i×ji \times ji×j 的奇偶性。若为偶数,则该组合对应的三角形面积必为整数,答案加一。
完整代码