|  | 
 
 发表于 2017-1-12 16:21:44
|
显示全部楼层 
| 复制代码# 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楼老大的方法  感谢~
 | 
 |