📜  给定基数中最大的左截断素数(1)

📅  最后修改于: 2023-12-03 15:27:34.729000             🧑  作者: Mango

给定基数中最大的左截断素数

在一个给定的基数下,找到最大的左截断素数。

例如,对于基数10,最大的左截断素数是7。因为7、73、739都是素数,但以7开头的数字中它是最大的。

算法

我们可以使用逐位判断的方式去判断一个数是否为素数。

首先,我们需要一个“is_prime”函数来判断一个数是否为素数。该函数接收一个整数参数,并返回布尔值。该函数使用试除法来判断素数,即它会检查该数是否可以被从2到它的平方根的每个整数整除。

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

接下来,我们需要一个函数来找到一个给定基数下最大的左截断素数。该函数接收一个基数作为参数,并返回找到的最大素数。该函数将从大到小检查每个数字,并使用“is_prime”函数来检查它们是否为素数。如果找到了一个素数,则该函数将其返回。

def max_left_truncatable_prime(base):
    for i in range(base-1, 0, -1):
        if is_prime(i) and all(is_prime(int(str(i)[:j])) for j in range(1, len(str(i))+1)):
            return i
    return None

该函数使用“all”函数来检查除了首位以外的所有位是否也是素数。它做到这一点是通过将数字转换为字符串,然后使用字符串切片来获得左截断的数字。使用“int”函数将其转换回数字形式,然后使用“is_prime”函数来检查它是否为素数。使用“all”函数来判断该数字是否满足条件。

示例

我们将使用上述算法和函数来查找10进制下最大的左截断素数。我们将调用“max_left_truncatable_prime”函数,并将10作为传递参数。该函数将返回最大的左截断素数。我们将使用markdown格式输出结果。

import markdown

base = 10
result = max_left_truncatable_prime(base)

if result is not None:
    print(markdown.markdown(f"在{base}进制下,最大的左截断素数是:{result}"))
else:
    print(markdown.markdown(f"在{base}进制下,没有找到左截断素数。"))

输出结果为:

在10进制下,最大的左截断素数是:7

结论

我们已经介绍了如何在一个给定基数下找到最大的左截断素数的算法和实现。我们使用试除法来判断素数,并使用逐位判断的方式来找到左截断素数。这使我们能够快速找到最大的左截断素数并进行检查。