ProjectEuler 404 - Crisscross Ellipses

专注数论分析三十年。

暴力跑了 2min ……

如果你想享受做题的乐趣就不要看啦。。

好了如果你还在看的话那就不能享受做题的乐趣了。。

事实上就是要快速枚举 a2+4b2=p2a^2 + 4 b^2 = p^2a,b,ca, b, c 均为奇数,且 gcd(a,b,c)=1gcd(a,b,c) = 1 )。

换元令 a=c+2i,b=cja = c + 2i, b = c - j ,代入后整理得 p=i2+j22jip = \frac{i^2 +j^2}{2j - i}

再次换元令 t=2jit = 2j - i ,代入后整理得 p=5j2t+t4jp = \frac{5j^2}{t} + t - 4j

枚举 jj 即可。

相关点:如果 a2+b2=c2a^2+b^2=c^2 ,则将 a+bia + b i 分别乘上 1+2i1 + 2i12i1 - 2i 就可以得到 a2+b2=5c2a^2 + b^2 = 5c^2 的解。

而且这是个丢番图方程,用一个奇怪的方法叫做割线法可以求?

关于 ax2+by2=cz2a x^2 + b y^2 = c z^2 有一种方法可以快速枚举出来……名字叫做 Lagrange’s trick ?

首先两边都乘以 aa ,把原方程化为 x2+by2=cz2x^2 + by^2 = cz^2 这种样子。

首先我们需要找到任意一组解 (x0,y0,z0)(x_0, y_0, z_0) 。考虑

(cz0z)2=c2z02z2=(x02+by02)(x2+by2)=(x0x+by0y)2+b(x0yy0x)2\begin{array}{rl} (cz_0 z)^2 & = c^2 z^2_0 z^2 \\ & = (x^2_0 + b y^2_0) (x^2 + b y^2) \\ & = (x_0 x + b y_0 y)^2 + b (x_0 y - y_0 x)^2 \\ \end{array}

然后再考虑 x2+by2=z2x^2 + b y^2 = z^2 该怎么解。显然 by2=(zx)(z+x)b y^2 = (z - x)(z + x) 。分解质因数 b=b1b2b = b_1 b_2 ,令 y2=zxb1z+xb2y^2 = \frac{z-x}{b_1} \frac{z+x}{b_2} ,然后就可以令 y=tpq,zxb1=tp2,z+xb2=tq2y = tpq, \frac{z-x}{b_1} = tp^2, \frac{z+x}{b_2} = tq^2 ,其中 p,qp, q 互质。枚举 p,qp, q 保证得到的数是整数即可。