2022蓝桥杯-mid-算法题《超级质数》

解题思路

参考超级质数-方步乱的代码 - 蓝桥云课

定义两个方法,一个用于判断是否为素数,另一个方法用于判断该素数中是否有连续出现的数字,因为一旦有连续出现的数字,则必定不满足题意要求各个子串均为素数。

在枚举素数的各种组合部分,同时做是否满足题意的判断。满足题意的素数组合将会形成一个新的数列,在该数列的基础上继续拼凑新的素数,每次在上一次拼凑出的满足题意的素数的个位上拼凑新的素数,并再次进行条件判断,直到没有满足要求的新素数出现,则枚举结束。

最后使用数列的.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])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

圆圆的dl君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值