参考Pell方程的解法,x值最小的正整数即基本解,可由$\sqrt D$的连分数展开得到,结果是$D=661$。
注:此时$x=16421658242965910275055840472270471049$,$y=638728478116949861246791167518480580$。
import math
sq=[i*i for i in range(33)]
x=y=d=0
for n in range(2,1001):
if n not in sq:
s=int(math.sqrt(n))
r,k,a=s,1,[s]
while k!=1 or len(a)==1:
k=(n-r*r)/k
r=(s+r)/k*k-r
a.append((s+r)/k)
if len(a)%2:
a=a[:-1]
else:
a=a+a[1:-1]
p,q,i=[a[0],a[0]*a[1]+1],[1,a[1]],2
while i < len(a):
p.append(a[i]*p[-1]+p[-2])
q.append(a[i]*q[-1]+q[-2])
i=i+1
if p[-1]>x:
x,d,y=p[-1],n,q[-1]
print x,d,y
|