题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1041
分析:实质上是求(a,b,c)勾股数的个数,其中c是确定的。
对于勾股数有一组通式:
a=m^2-n^2
b=2mn
c=m^2+n^2
对于上面3个式子有3个约束:
①gcd(a,b,c)=1
②gcd(m,n)=1
③m,n奇偶不同
(充分性很好证,必要性的话百度百科说的很详细)
下面说说对三个约束的理解:
①讨论的是互质的勾股数,因为不是互质的可以先约分成不互质的,没有讨论意义(这些被称为派生勾股数)
②也是和①一个道理
③是一个推论,如果m,n同奇偶,那么a=m^2-n^2必定为2的倍数,和b就一定不互质了。
那么对于此题不妨设a<b<c,最后结果*8就是题目所求
当然可以枚举做,做到sqrt(c)就可以了,但是要注意以上的只能处理互质的勾股数,不能处理派生勾股数,所以其实要先枚举c的因数作为勾股数中的最大数,再进行上述枚举。
但是这样会超时,但根据约束③可以知道c=m^2+n^2必定是mod4余1,这就是一个很牛的剪枝了……