我们称197为一个循环质数,因为它的所有轮转形式: 197, 971和719都是质数。
100以下有13个这样的质数: 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, 和97.
100万以下有多少个循环质数?
def get_primes(n):
""" n以下质数 """
n_set = set(range(3, n, 2))
n_set.add(2)
for i in range(3, n, 2):
if i in n_set:
i_set = set(range(i * 2, n, i))
n_set -= i_set
return n_set
def get_circular(x):
"""
x是否是循环质数
判断13时,circular_list.extend([13, 31])
"""
l = [prime]
p_str = str(prime)
for i in range(len(p_str) - 1):
p = int(p_str[i + 1:] + p_str[0: i + 1])
if p in l:
continue
if p not in primes_set:
return None
else:
l.append(p)
circular_list.extend(l)
return None
n = 10 ** 6
primes_set = get_primes(n)
# 存储循环质数
circular_list = []
for prime in primes_set:
if prime in circular_list:
continue
prime_str = str(prime)
if prime > 10:
for i in '024568':
if i in prime_str:
break
if i in prime_str:
continue
get_circular(prime)
print(len(circular_list))