# encoding:utf-8
# n**2 + a*n + b 找到得到连续素数最多的a、b系数
from time import time
from math import sqrt
def getPrimes(N):
primes = [True] * N
primes[0], primes[1] = False, False
for i, prime in enumerate(primes):
if prime:
for j in range(i * i, N, i):
primes[j] = False
return [k for k, p in enumerate(primes) if p]
def isPrime(N, prime_list):
sqr = sqrt(N) + 1
for t in prime_list:
if N % t == 0:
return False
if t > sqr:
break
return True
def euler027():
prime_list = getPrimes(1000)
count_max = 0
for b in prime_list:
for a in range(-b, b, 2):
count = 0
for n in range(80):
t = n ** 2 + a * n + b
if t < 2:
break
else:
if isPrime(t, prime_list):
count += 1
else:
break
if count_max < count:
count_max, max_a, max_b = count, a, b
print(count_max, max_a, max_b)
if __name__ == '__main__':
start = time()
euler027()
print('cost %.6f sec' % (time() - start))
学习了4楼老大的方法 感谢~ |