注册 登录
编程论坛 Python论坛

计算标准佩尔方程x^2-Dy^2=1的最小解的程序

ysr2857 发布于 2025-04-26 19:44, 478 次点击
while True:
    try:
        a = 1
        b = 0
        c = input('请输入一个数字:')
        c = eval(c)
        d=c**0.5
        a0=int(d)
        a1=a0
        r=d
        p0=a0
        q0=1
        r=1/(r-a1)
        a1=int(r)
        p1=a0*a1+1
        q1=a1
        s=2
        while int(1/(r-a1))!=2*a0 :
            s+=1
            r=1/(r-a1)
            a1=int(r)
            p2=a1*p1+p0
            q2=a1*q1+q0
            p0=p1
            q0=q1
            p1=p2
            q1=q2
        if s % 2 == 0 :
            x0=p1
            y0=q1
        else :
            x0=2*p1*p1+1
            y0=2*p1*q1
        print(x0,y0)
    except:exit()
2 回复
#2
ysr28572025-04-30 21:16
while True:
    try:
        a = 1
        b = 0
        c = input('请输入一个数字:')
        c = eval(c)
        c=c*10**40
        d=c**0.5
        d=int(d)
        d=str(d)
        a0=int(d[:len(d)-20])
        a1=a0
        r=d
        p0=a0
        q0=1
        r=10**40/int(r[len(r)-20:])
        r=int(r)
        r=str(r)
        a1=int(r[:len(r)-20])
        p1=a0*a1+1
        q1=a1
        s=1
        while int(r[:len(r)-20])!=2*a0 :
            s+=1
            r=10**40/int(r[len(r)-20:])
            r=int(r)
            r=str(r)
            a1=int(r[:len(r)-20])
            p2=a1*p1+p0
            q2=a1*q1+q0
            p0=p1
            q0=q1
            p1=p2
            q1=q2
        if s % 2 == 0 :
            x0=p0
            y0=q0
        else :
            x0=2*p0*p0+1
            y0=2*p0*q0
        print(x0,y0)
        print("循环节长度",s)
    except:exit()

[此贴子已经被作者于2025-5-6 23:14编辑过]

#3
ysr28572025-05-08 13:55
while True:
    try:
        a = 1
        b = 0
        c = input('请输入一个数字:')
        c = eval(c)
        d=c**0.5
        a0=int(d)
        a1=a0
        r=d
        p0=a0
        q0=1
        r=1/(r-a1)
        a1=int(r)
        p1=a0*a1+1
        q1=a1
        s=2
        while int(1/(r-a1))!=2*a0 :
            s+=1
            r=1/(r-a1)
            a1=int(r)
            p2=a1*p1+p0
            q2=a1*q1+q0
            p0=p1
            q0=q1
            p1=p2
            q1=q2
        if s % 2 == 0 :
            x0=p1
            y0=q1
        else :
            x0=2*p1*p1+1
            y0=2*p1*q1
        print(x0,y0)
        print("循环长度",s)
    except:exit()
1