📅  最后修改于: 2023-12-03 15:37:15.853000             🧑  作者: Mango
在一个数组中找到所有的颠倒素数,颠倒素数是指将一个素数的数字顺序颠倒所得到的数字仍为素数。例如,17和71都是颠倒素数。
def is_reverse_prime(num: int) -> bool:
pass
def reverse_primes(lst: List[int]) -> List[int]:
pass
lst
:List[int]
List[int]
assert reverse_primes([13, 17, 31, 37, 71, 73]) == [13, 17, 31, 37, 71, 73]
assert reverse_primes([80, 104, 190]) == []
这道题要找到所有的颠倒素数,首先需要知道素数是什么,然后需要知道怎么判断一个数字是否为素数,并且还需要知道怎么将一个数字中的数字顺序颠倒。
素数是指在大于 1 的自然数中,除 1 和该数能被整除外,无法被其他自然数整除的数。
所以,对于一个大于 1 的自然数,如果其能够被 $2 \sim \sqrt{n}$ 中的任意一个数整除,则说明该数不是素数。
根据以上思路,我们来考虑如何编写一个函数来判断一个数是否为素数:
def is_prime(n: int) -> bool:
if n <= 1:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
颠倒数字可以考虑将数字转换为字符串,然后再翻转字符串:
def reverse_number(n: int) -> int:
return int(str(n)[::-1])
判断一个数是否为颠倒素数就需要分别判断这个数和它的颠倒数是否都是素数:
def is_reverse_prime(num: int) -> bool:
return is_prime(num) and is_prime(reverse_number(num))
只需要对输入的列表中的每一个数调用 is_reverse_prime()
函数,如果是颠倒素数,则将其放入结果集合中即可:
from typing import List
def reverse_primes(lst: List[int]) -> List[int]:
res = []
for num in lst:
if is_reverse_prime(num):
res.append(num)
return res
from typing import List
def is_prime(n: int) -> bool:
if n <= 1:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def reverse_number(n: int) -> int:
return int(str(n)[::-1])
def is_reverse_prime(num: int) -> bool:
return is_prime(num) and is_prime(reverse_number(num))
def reverse_primes(lst: List[int]) -> List[int]:
res = []
for num in lst:
if is_reverse_prime(num):
res.append(num)
return res