解题思路
定义两个方法,一个用于判断是否为素数,另一个方法用于判断该素数中是否有连续出现的数字,因为一旦有连续出现的数字,则必定不满足题意要求各个子串均为素数。
在枚举素数的各种组合部分,同时做是否满足题意的判断。满足题意的素数组合将会形成一个新的数列,在该数列的基础上继续拼凑新的素数,每次在上一次拼凑出的满足题意的素数的个位上拼凑新的素数,并再次进行条件判断,直到没有满足要求的新素数出现,则枚举结束。
最后使用数列的.sort()方法做个升序排列,取最后一个(也就是最大的那个数字)数字输出。
primeNumber = [2, 3, 5, 7]
primeArrayOne = primeNumber.copy()
primeArrayTwe = []
# 判断是否为素数
def judgePrime(a):
for y in range(2, a):
if a % y == 0:
return False
return True
# 判断是否有连续相同的数字出现
def DoubleNumber(a):
s = list(str(a))
if len(s) < 3:
return True
for i in range(len(s)-1):
if s[i] == s[i+1]:
return False
return True
# 枚举素数的组合
while 1:
for x in primeArrayOne:
for z in primeNumber:
if judgePrime(x * 10 + z) and DoubleNumber(x * 10 + z):
primeArrayTwe.append(x * 10 + z)
if len(primeArrayTwe) >= 1:
primeArrayOne.clear()
primeArrayOne = primeArrayTwe.copy()
primeArrayTwe.clear()
else:
break
primeArrayOne.sort()
print(primeArrayOne[len(primeArrayOne) - 1])