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。
我忽略了一些问题吗?
答案 0 :(得分:2)
最长的主要名单不是必须至少80,因为这是一个例子吗?
问题陈述中给出的公式为n² 79n + 1601
,因此a = 79
和b = 1601 > 1000
。因此,您不应期望连续素数的数量大于80.实际上,71是正确的连续素数。现在您只需要确保product
正确无误。
提示:
a * b
的值为负数。