[bzoj 1041][HAOI2008]圆周上的整点(枚举)

题目: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,这就是一个很牛的剪枝了……

posted @ 2014-08-11 21:22  Chellyutaha  阅读(85)  评论(0编辑  收藏