|
发表于 2017-1-14 00:00:58
|
显示全部楼层
# encoding:utf-8
# 寻找100万以下的循环质数
from time import time
def getPrimes(N=1000000):
l_result = [True] * N
l_result[0], l_result[1] = False, False
for i in range(0, N):
if l_result[i]:
for j in range(i * i, N, i):
l_result[j] = False
return l_result
def euler034(N=1000000):
l_primes = getPrimes(N)
l_k = [k for (k, v) in enumerate(l_primes) if v]
l_result = []
for each in l_k:
if each in l_result:
continue
tmp = str(each)
if len(tmp) == 1:
l_result.append(each)
continue
else:
flag = True
l_tmp = []
for i in range(1, len(tmp)):
tmp = tmp[1:] + tmp[0]
if not l_primes[int(tmp)]:
flag = False
break
else:
l_tmp.append(int(tmp))
if flag:
l_result.append(each)
l_result.extend(l_tmp)
l_result = list(set(l_result))
l_result.sort()
print(l_result)
print(len(l_result))
if __name__ == '__main__':
start = time()
euler034(1000000)
print('cost %.6f sec' % (time() - start))
[2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, 97, 113, 131, 197, 199, 311, 337, 373, 719, 733, 919, 971, 991, 1193, 1931, 3119, 3779, 7793, 7937, 9311, 9377, 11939, 19391, 19937, 37199, 39119, 71993, 91193, 93719, 93911, 99371, 193939, 199933, 319993, 331999, 391939, 393919, 919393, 933199, 939193, 939391, 993319, 999331]
55
cost 0.532378 sec
|
|