📜  检查翻转倒置,镜像翻转和镜像翻转倒置中的数字是否为素数(1)

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

检查数字在翻转、倒置、镜像翻转和镜像翻转倒置中是否为素数

当我们处理数字时,我们经常需要对数字进行各种处理,如翻转、倒置、镜像翻转和镜像翻转倒置等。在这里,我们考虑在这些数字处理过程中,检查数字是否为素数的问题。本文将介绍如何检查数字在各种数字处理中是否为素数,并给出相应的代码。

1. 翻转

对于一个整数 $n$,我们可以将其翻转为 $m$,其中 $m$ 的各位数字与 $n$ 的各位数字完全相同,只是顺序相反。例如,$12345$ 的翻转为 $54321$。

编写一个函数 reverse(n:int) -> int,返回 $n$ 的翻转数。

def reverse(n:int) -> int:
    return int(str(n)[::-1])

然后,我们编写一个判断素数的函数 is_prime(n:int) -> bool,用于检查某个数字是否为素数。

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

最后,我们将两个函数组合起来,判断数字在翻转中是否为素数。

def is_prime_after_reverse(n:int) -> bool:
    m = reverse(n)
    return is_prime(m)
2. 倒置

对于一个整数 $n$,我们可以将其倒置为 $m$,其中 $m$ 的各位数字与 $n$ 的各位数字完全相同,只是顺序相反,并且去掉了前导零。例如,$123450$ 的倒置为 $54321$。

编写一个函数 reverse_drop_zero(n:int) -> int,返回 $n$ 去掉前导零后的倒置数。

def reverse_drop_zero(n:int) -> int:
    return int(str(n)[::-1].lstrip('0') or '0')

然后,我们将两个函数组合起来,判断数字在倒置中是否为素数。

def is_prime_after_reverse_drop_zero(n:int) -> bool:
    m = reverse_drop_zero(n)
    return is_prime(m)
3. 镜像翻转

对于一个整数 $n$,我们可以将其镜像翻转为 $m$,其中 $m$ 的各位数字与 $n$ 的各位数字完全相同,只是将所有数字的左右顺序对称。例如,$12345$ 的镜像翻转为 $54321$。

编写一个函数 mirror_reverse(n:int) -> int,返回 $n$ 的镜像翻转数。

def mirror_reverse(n:int) -> int:
    s = str(n)
    m = ''
    for i in range(len(s)-1,-1,-1):
        if s[i] in '018':
            m += s[i]
        elif s[i] == '6':
            m += '9'
        elif s[i] == '9':
            m += '6'
        else:
            return None
    return int(m)

然后,我们将两个函数组合起来,判断数字在镜像翻转中是否为素数。

def is_prime_after_mirror_reverse(n:int) -> bool:
    m = mirror_reverse(n)
    if m is None:
        return False
    return is_prime(m)
4. 镜像翻转倒置

对于一个整数 $n$,我们可以将其镜像翻转倒置为 $m$,其中 $m$ 的各位数字与 $n$ 的各位数字完全相同,只是将所有数字的左右顺序对称,然后将顺序倒置。例如,$12345$ 的镜像翻转倒置为 $12354$。

编写一个函数 mirror_reverse_reverse(n:int) -> int,返回 $n$ 的镜像翻转倒置数。

def mirror_reverse_reverse(n:int) -> int:
    s = str(n)
    m = []
    for i in range(len(s)-1,-1,-1):
        if s[i] in '018':
            m.append(s[i])
        elif s[i] == '6':
            m.append('9')
        elif s[i] == '9':
            m.append('6')
        else:
            return None
    return int(''.join(m))

然后,我们将两个函数组合起来,判断数字在镜像翻转倒置中是否为素数。

def is_prime_after_mirror_reverse_reverse(n:int) -> bool:
    m = mirror_reverse_reverse(n)
    if m is None:
        return False
    return is_prime(m)
5. 总结

我们可以利用上述函数,对给定的数字进行翻转、倒置、镜像翻转和镜像翻转倒置等操作,然后检查数字是否为素数。需要注意的是,上述函数在处理数字时,需要注意各种边界情况,如去掉前导零、判断是否存在非对称数字等。

以上是代码的markdown格式。其中,我们给出了翻转、倒置、镜像翻转和镜像翻转倒置等操作的代码和判断素数的代码,同时也给出了组合后的判断数字是否为素数的代码。我们需要注意,数字在不同的操作中的素数性质是不同的,因此我们需要对每种操作分别进行判断。