和题解的做法有些不同,不知道为什么,但是能够通过。
首先按题解的做法先将式子除以 z2。令 yz=a,xz=b。有:
x2z2−xyz2−y2z2+yz+1−xz=0−a2−ab+b2+a+1−b=0
题解的人类智慧:令 k=b−1a−1。我们容易发现有 b=ak−k+1。
我们的思路就是用 k 表示 a,b,显然难度有点大(,但是没有其他做法,所以我们直接把 b=ak−k+1 代入到上面那个关于 a,b 的式子中:
−a2−a(ak−k+1)+(ak−k+1)2+a+1−(ak−k+1)=0−a2−a2k+ak−a+a2k2+k2+1−2ak2+2ak−2k+a+1−ak+k−1=0
读者可以尝试自行抵消一部分,最后我们把这依托写成一元二次方程的形式,我们有:
(k2−k−1)a2+(−2k2+2k)a+(k2−k+1)=0
因为最后和题解有一点不一样,所以这里可能不保证正确性,但是若算的不一样,应该可以用下面一样的方法解这个方程:
令 A=k2−k−1,B=−2k2+2k,C=k2−k+1,有:
A+B+C=0
令人惊讶,这样的话,上面那个式子有一个 a−1 的因式,但是先前我们的 a−1 是分母,所以这里 a≠1。我们可以很容易写出另一个因式,为:
Aa−C=(k2−k−1)a−(k2−k+1)
OK,那么这个时候就能很容易表示 a 了,其值为:
k2−k+1k2−k−1
代入我们最开始那个 b=ak−k+1,有:
b=k3−k2+kk2−k−1−k3−k2−kk2−k−1+k2−k−1k2−k−1=k2+k−1k2−k−1
我们设 k 的最简分数形式为 pq,这里直接代入,算是比较简单了:
a=(pq)2−pq+1(pq)2−pq−1=p2−pq+q2p2−pq−q2b=(pq)2+pq−1(pq)2−pq−1=p2+pq−q2p2−pq−q2
因为我们定义 a=yz,b=xz,所以我们可以这样表示 x,y,z:
x=t(p2+pq−q2),y=t(p2−pq+q2),z=t(p2−pq−q2)
其中 t 为一个有理数,但是 gcd(x,y,z)=1,所以 t=1。
因为 y 的限制,我们可以把 p,q 的绝对值范围控制在 O(√n) 大小的范围内,暴力枚举即可。
但是显然 a=1 的时候存在解 x=y=z=1 我们没有算到,加上就行了。
本文作者:xingyu_xuan
本文链接:https://www.cnblogs.com/xingyuxuan/p/18182950
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步