Project Problem 37

本文探讨了一类特殊的素数——截尾素数,这类素数无论从左往右还是从右往左去除数字后仍保持素数特性。通过递归生成候选数,并结合素数验证算法,成功找出所有符合条件的素数并计算其总和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Problem 37

The number 3797 has an interesting property. Being prime itself, it is possible to continuously remove digits from left to right, and remain prime at each stage: 3797, 797, 97, and 7. Similarly we can work from right to left: 3797, 379, 37, and 3.

Find the sum of the only eleven primes that are both truncatable from left to right and right to left.

NOTE: 2, 3, 5, and 7 are not considered to be truncatable primes.
# 一个素数如果从左右两边依次去掉一个数字后还是素数,就满足条件,求全部的这样的素数的和。
def struct(n):
    string = '1379'
    result = []
    if n == 0:
        return ' '
    for i in string:
        for j in struct(n-1):
            temp = i + j
            result.append(temp.strip())
    return result

def change(string):
    lst = [string]
    for i in range(1,len(string)):
        substr1 = string[i:]
        lst.append(substr1)
        substr2 = string[:i]
        lst.append(substr2)
    return lst

def isprime(n):
    if n <= 1:
        return False
    for i in range(2,int(n**0.5+1)):
        if n % i == 0:
            return False
    return True


lst2 = [23, 53]     
for i in range(2,7):   
    for j in struct(i):
        for s in change(j):
            if not isprime(int(s)):
                break
        else:
            lst2.append(int(j))
            if len(lst2) == 11:
                print(sum(lst2))
                break

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值