|
发表于 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楼老大的方法 感谢~ |
|