You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

循环结束与下一轮开始间变量异常变更问题(Project Euler #66)

问题:Project Euler第66题代码变量传递异常

我编写了适配Project Euler第66题(兼容第64题测试)的代码,但发现循环结束进入下一轮时变量num未正确传递。该变量并非while循环的索引变量,暂时无法定位问题原因。以下是完整代码及输出结果:

完整代码

from math import gcd, sqrt

for D in range(23,1001):
    h=(1,int(sqrt(D))); k=(0,1)
    num,denom=(1,sqrt(D)-int(sqrt(D)))

    while not h[1]**2-D*k[1]**2==1:
        print()
        print('before',round(num),round(denom-sqrt(D)))
        tgcd=gcd(round(num),round(2*sqrt(D)*denom-denom**2))
        print('gcd',tgcd)
        num*=((2*sqrt(D)-denom)/tgcd)
        denom*=((2*sqrt(D)-denom)/tgcd)
        print('after filling',round(num-sqrt(D)),round(denom))
        coeff=0
        while num>denom:
            num-=denom
            coeff+=1
        print('after coefficient extracted',round(num-sqrt(D)),round(denom))
        num,denom=denom,num
        print('coeff',coeff)
        h=(h[1],coeff*h[1]+h[0])
        k=(k[1],coeff*k[1]+k[0])
        print('after everything',round(num),round(denom-sqrt(D)),'<-The first number isn not carried over into the next loop here' if round(num)==7 else '')

输出结果

before 1 -4
gcd 1
after filling 4 7
after coefficient extracted -3 7
coeff 1
after everything 7 -3 

before 7 -3
gcd 7
after filling 3 2
after coefficient extracted -3 2
coeff 3
after everything 2 -3 

before 2 -3
gcd 2
after filling 3 7
after coefficient extracted -4 7
coeff 1
after everything 7 -4 <-The first number is not carried over into the next loop here

before 1 -4
gcd 1
after filling 4 8
after coefficient extracted -4 8
coeff 1
after everything 8 -4 

before 1 -5
gcd 1
after filling 5 0

内容的提问来源于stack exchange,提问作者Zuter_242

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 17:55:20