0

这个 Project Euler 问题让我有点困惑。

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

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。

我忽略的问题中有什么吗?

4

1 回答 1

2

最长的素数列表是否必须至少为 80,因为这是作为示例给出的?

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

暗示:

的值为a * b负。

于 2013-07-16T15:51:17.070 回答