|
发表于 2017-1-18 14:56:05
|
显示全部楼层
- # encoding:utf-8
- # 计算对角线质数比例
- 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, l_pr):
- # 不考虑1
- if n < 4:
- return True
- if n % 2 == 0 or n % 3 == 0 :
- return False
- t = int(sqrt(n))
- for i in l_pr:
- if i > t:
- return True
- if n % i == 0:
- return False
- return True
- def euler058(N=100000):
- n_chprimes, step, num = 0, 0, 1
- l_primes = getPrimes(N)
- while True:
- step += 2
- for i in range(1, 5):
- num += step
- flag = isPrime(num, l_primes)
- if flag:
- n_chprimes += 1
- if n_chprimes / (2 * step + 1) < 0.10:
- print(step + 1, n_chprimes / (2 * step + 1))
- break
- if __name__ == '__main__':
- start = time()
- euler058()
- print('cost %.6f sec' % (time() - start))
复制代码
26241 0.09999809454850327
cost 2.233223 sec |
|