|
发表于 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
|
|