项目欧拉Q27:这段代码有什么问题?

时间:2014-05-07 15:33:58

标签: python math

编写本程序是为了解决Project Euler Problem 27: Project Euler Problem 27

以下是代码:

   ab=[0,0]
b_list=[]
for x in range(2,1000):
    fact=1
    y=2
    while y*y<=x:
        if x==2:
            break
        if x%y==0:
            fact+=1
            break
        y+=1
    if fact==1:
        b_list.append(x)

number=0
max_=0
for a in range(-999,1000):
    for b in b_list:
        if a<=-b:
            continue
        n=0
        num_of_primes=0
        while True:
            number=((n*n)+(a*n)+b)
            n+=1
            print number
            if number>0:                
                factors=1
                div=2
                while div*div<=number:
                    if number==2:
                        break
                    if number%div==0:
                        factors+=1
                        break
                    div+=1
                if factors==1:
                    num_of_primes+=1
            else:
                break
        if max_<num_of_primes:
            max_=num_of_primes
            ab[0]=a
            ab[1]=b                
print ab[0]*ab[1]

但是当我运行此代码时,代码在= -63处停止而不提供任何输出。任何人都能说明为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

我想你可以多考虑​​一下这个问题。此外,您的代码看起来有点迟缓。如果您编写一些函数而不是一次性完成所有操作,它可能会有所帮助。我在那里看到了很多代码重复

无论如何,这是我的两分钱:

程序可能无限期地停留在while True:循环中,因为您只在number <= 0时突破循环。我没有过多地关注您的代码,但是您是否打算使用while True:周期内的break语句突破while div*div<=number:循环?这是不可能的。你很可能需要一个变量来检测你是否过早退出循环然后从外循环中断。否则,python循环的else子句可能会以某种方式提供帮助(参见Control Flow in Python)。