循环结束与下一轮开始间变量异常变更问题(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
相关产品推荐
相关产品推荐

