1 条题解
-
0
本题做法很多,如果你想到了的做法,可以练习出题人DengDuck
邮箱:moudengya123@qq.com
这可以让DengDuck出更强的数据,同时在加强版的题面上也会感谢您
简化题意
大家都知道勾股定理吧,对于一个直角三角形,两直角边平方之和等于斜边的平方
式子表示为
其实还有一个勾股逆定理,若三角形满足,三角形为直角三角形
所以本题可以理解为
已知正整数,求
$$\begin{cases} x^2+y^2=z^2\\ x<y<z \leq n \end{cases} $$的所有正整数解
做法
直接枚举,判断是否符合上述式子
这样显然超时
做法
可以枚举,然后判断对应的是不是平方数(平方根是不是整数)
稍微快一点,
做法
$$x^2+y^2=z^2 \\ x^2=z^2-y^2 \\ x^2=(z+y)(z-y)\\ \because z>0,y>0 \\ \therefore z+y>z-y $$考虑对分解成,其中且为正整数 得二元一次方程组
解得
$$\begin{cases} z=\frac{a+b}2\\ y=\frac{a-b}2 \end{cases} $$所以有一个要求
才能使为整数
对于每一个,求出,判断以上注意事项即可
如何分解
如果直接分解,需要枚举~,复杂度太高了,我们需要简单的做法
可以分解,在推广到
memset(cnt,0,sizeof(cnt)); long long k=x; for(int j=2;j<=k;j++) { if(k%j==0) { cnt[0][0]++; cnt[cnt[0][0]][0]=j; while(k%j==0) { cnt[cnt[0][0]][1]++; k/=j; } cnt[cnt[0][0]][1]*=2; //to be x^2 } }
时间复杂度为
- 1
信息
- ID
- 6
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 10
- 已通过
- 4
- 上传者