zoukankan      html  css  js  c++  java
  • [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,这就是一个很牛的剪枝了……

  • 相关阅读:
    poj 2443
    codeforces 263D
    codeforces 263C
    uva 11080
    uva 11235
    uva 11748
    STL uva 11991
    (KM) uva 11383
    (树形DP) uva 10859
    codeforces 242C
  • 原文地址:https://www.cnblogs.com/wmrv587/p/3905678.html
Copyright © 2011-2022 走看看