#P04022. 丢番图和勾股数

丢番图和勾股数

题目背景

勾股数,又名毕氏三元数 。勾股数就是可以构成一个直角三角形三边的一组正整数。

由上可知对于正整数 x,y,zx,y,z,如果 x2+y2=z2x^2+y^2=z^2,那么 x,y,zx,y,z 就是一组勾股数。

古希腊学者毕达哥拉斯和柏拉图都研究过勾股数并尝试给出计算勾股数的公式,直到古希腊另一位学者丢番图完美解决了这个问题,丢番图找到的构造勾股数的一般法则如下:

a,ba,b 是正整数,并且 2ab2ab完全平方数 (开平方结果是整数),令

$$\left\{ \begin{aligned} x & = a+\sqrt{2ab} \\ y & = b+\sqrt{2ab} \\ z & = a+b+\sqrt{2ab} \end{aligned} \right. $$

x,y,zx,y,z 是一组勾股数。

题目描述

给定一个正整数 NN ,找到 zNz \leq N 的所有勾股数。

需要注意的是:

  1. x,y,zx,y,zy,x,zy,x,z 是同一个勾股数,不能重复计算;
  2. 要对找出的所有勾股数进行分类,分类的方法如下:

如果 x,y,zx,y,z 是一组勾股数,那么 x,y,zx,y,z2x,2y,2z2x,2y,2z3x,3y,3z3x,3y,3z、…… 都是同一类勾股数。

例如 3,4,53,4,56,8,106,8,109,12,159,12,1512,16,2012,16,20 就是同一类勾股数。

输入格式

一个正整数NN

输出格式

22 个正整数 n,mn,m,分别表示找到的所有勾股数分类后的类数和所有勾股数的数量;

输入输出样例

100
16 52

说明/提示

👀️ 对于100%100\%的数据,5N100005 \leq N \leq 10000,勾股数类数 n2000n \leq 2000,勾股数总数 m15000m \leq 15000