项目Euler#27使用Python

时间:2013-07-16 15:40:06

标签: python python-2.7

This Project Euler question让我有点困惑。

这是我认为正确的解决方案:

import math
start = time.time()
def check_prime(a, b, n):
    num = n**2 + a * n + b
    mod = 3
    if num >= 0:
        check = int(math.sqrt(num))
    else:
        return False
    while mod <= check:
        if num % mod == 0:
            return False
        mod += 2
    return True
def main():
    n = 0
    max_n = 0
    for a in xrange(-1000, 1000):
        for b in xrange(-1000, 1000):
            while check_prime(a, b, n):
                n += 1
                if n > max_n:
                    max_n = n
                    product = a * b
        n = 0
    print max_n, product
    print time.time() - start
if __name__ == '__main__':
    main()

这给了我376的连续主要列表,其中实际列表只有71.我认为我只是难以理解这个问题。最长的主要名单不是必须至少80,因为这是一个例子吗?我的程序计算71列表的两个术语的乘积,但随后它继续升至376。

我忽略了一些问题吗?

1 个答案:

答案 0 :(得分:2)

  

最长的主要名单不是必须至少80,因为这是一个例子吗?

问题陈述中给出的公式为n² 79n + 1601,因此a = 79b = 1601 > 1000。因此,您不应期望连续素数的数量大于80.实际上,71是正确的连续素数。现在您只需要确保product正确无误。

提示:

  

a * b的值为负数。