有技巧的大力枚举.
- 求 $x^2+y^2=r^2$ 的整数解组数,只需要求出 $x,y>0$ 的组数,再 $\times 4,+4$ 即为答案.
- 方程变形得到 $y^2=(r+x)(r-x)$ ,记 $d=gcd(r+x,r-x)$ ,则 $y^2=d^2\cdot \frac {r+x} d \cdot \frac {r-x} d$ .
- 记 $u^2=\frac {r+x} d,v^2=\frac {r-x} d,u>v>0$ .则 $2r=d(u^2+v^2),2x=d(u^2-v^2),y=uvd$ .
- 因为 $d$ 是 $2r$ 的约数,所以大力枚举 $d$ ,再大力枚举 $u$ ,计算出 $v$ 后再验证 $u>v$ 及 $gcd(u,v)=1$ 是否成立即可.
- 时间复杂度 $O(r^{3\over 4} \cdot \log r)$ .实际上跑不满,因为枚举 $d$ 是 $O(r^{1\over 2})$ 的,而只有 $d$ 为 $2r$ 约数时才枚举 $u$ .
1 |
|