问题描述
如果一个质数 P 的每位数字都是质数, 而且每两个相邻的数字组成的两位 数是质数, 而且每三位相邻的数字组成的三位数是质数, 依次类推, 如果每相 邻的 k 位数字组成的 k 位数都是质数, 则 P 称为超级质数。
如果把超级质数 P 看成一个字符串, 则这个超级质数的每个子串都是质 数。
例如, 53 是一个超级质数。
请问, 最大的超级质数是多少?
判断每个质数是否符合超级质数
import math
def isPrime(n):
'''判断是否是质数'''
if n == 1:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
def subStr(n):
'''找出一个字符串数字的所有子串
如“123”:“1”,“2”,“3”,“12”,“123”,“23”
'''
lst = list(n)
sub = lst[:] #["1", "2", "3"]
for i in range(len(lst)):
for j in range(1, len(lst)):
if i + j < len(lst):
temp = lst[i: i + j + 1]
r = ''
for a in temp:
r += a #拼接字符串
sub.append(r)
return sub
ans = []
for i in range(10000):
if isPrime(i):
#1-10000内的质数
sub = subStr(str(i))
flag = 1
for a in sub:
if not isPrime(int(a)):
#如果有个子串不是质数
flag = 0
break
if flag == 1:
ans.append(i)
# print(i, end=" ")
print(ans)
print(ans[-1])
得出结果是373