开始: 2026-10-02 12:00:00

【集训02】订正

结束: 2026-10-04 23:00:00
当前  2026-11-04 13:29:47  类型: IOI  状态: 已经结束 

P2. 勾股数gg
描述

数学世界里有许多神奇的定理和公式,其中有些涉及到整数的性质和它们之间的关系。一个著名的问题是勾股数,即找到满足 a^{2} + b^{2} = c^{2} 的三个正整数 a,b,c,其中 a,b,c 分别称为勾股数的两条直角边和斜边。这个问题源于古希腊数学家毕达哥拉斯和他的学生对直角三角形的研究,因此也被称为毕达哥拉斯三元组。

假设我们有一个正整数 N,我们希望找到所有满足 a^{2} + b^{2} = c^{2} 的三元组 (a,b,c),其中 a,b,c 均为正整数,并且满足 a < b < c \leq N。换句话说,我们想找到所有在给定范围内的勾股三元组。这个问题不仅在数学研究中有着重要的地位,而且在计算机科学、物理学、工程学等诸多领域也有广泛的应用。

举个例子,假如我们有 N = 10,我们希望找到所有符合条件的三元组。通过手工计算或编写程序,我们可以发现一些勾股数对,如(3,4,5)和(6,8,10)。在这些例子中,3^{2} + 4^{2} = 5^{2} 和 6^{2} + 8^{2} = 10^{2},它们都满足 a < b < c \leq 10 的条件。

这个问题的难点在于如何高效地找到所有符合条件的三元组。在最简单的情况下,我们可以通过暴力枚举的方法来求解,即遍历所有可能的 a 和 b 值,并检查是否存在对应的 c 值使得上述等式成立。这种方法虽然直接,但随着 N 的增大,计算量会迅速增加,因此需要寻找更高效的算法。

通过解决这个问题,我们不仅可以加深对勾股数性质的理解,还能提升我们在算法设计和优化方面的能力。无论是对于数学爱好者还是计算机科学领域的从业者,这都是一个非常有趣且具有挑战性的问题。

下面,我们将通过编写一个程序来求解这个问题。程序将遍历所有可能的数对 (a,b,c),并统计符合条件的三元组的总数。这个程序的输入是一个正整数 N,输出是满足条件的三元组的数量。希望通过这个过程,能够为大家提供一些思路和灵感,让我们一起来探索勾股数的美妙世界吧!

即给定一个正整数 N,找出符合 a \times a + b \times b = c \times c 的三元组 (a,b,c) 的总数,其中 a < b < c \leq N。


输入

输入仅有一行包含一个正整数 N。

输出

输出仅有一行包含一个整数表示答案。

样例

输入

10

输出

2
提示

【样例解释】

只有两种方案:a = 3, b = 4, c = 5 或 a = 6, b = 8, c = 10。

【数据范围与提示】

对于 30\% 的数据满足:N \leq 300;

对于 60\% 的数据满足:N \leq 20000;

对于 100\% 的数据满足:N \leq 1000000。


提交

题目参数
时间限制 1 秒
内存限制 128 MB
提交