参考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
  
 
               |