使用 Python 检查最小数字的首位数字是否构成素数
假设我们有一个名为 digits 的数组,其中只包含数字。我们必须找到给定数字中最小的可能数字,然后检查通过获取生成的数字的首位数字和末位数字形成的数字是否为素数。我们将打印数字本身,然后打印素数。
因此,如果输入类似于 digits = [5,2,1,7],则输出将是 1257 是最小的数字。通过取首位数字和末位数字得到的数字是 17 和 71,两者都是素数。
为了解决这个问题,我们将遵循以下步骤:
- digits_freq := 一个包含数字频率的映射
- number := 空字符串
- 对于范围从 0 到 9 的 i,执行以下操作:
- 对于范围从 0 到 digits_freq[i] - 1 的 j,执行以下操作:
- number := number 拼接数字 i
- 对于范围从 0 到 digits_freq[i] - 1 的 j,执行以下操作:
- num := 通过取 number 的首位数字和末位数字形成的数字
- rev := 通过取 number 的末位数字和首位数字形成的数字
- 如果 num 是素数并且 rev 是素数,则
- 返回 number、num、rev
- 否则,如果 num 是素数,则
- 返回 number、num
- 否则,如果 rev 是素数,则
- 返回 number、rev
- 否则,
- 返回 False
让我们看看以下实现以获得更好的理解:
示例代码
from collections import defaultdict def isPrime(num): if num > 1: for i in range(2, num): if num % i == 0: return False return True return False def solve(arr): digits_freq = defaultdict(int) for i in range(len(arr)): digits_freq[arr[i]] += 1 number = "" for i in range(0, 10): for j in range(digits_freq[i]): number += str(i) num = int(number[0] + number[-1]) rev = int(number[-1] + number[0]) if isPrime(num) and isPrime(rev): return int(number), num, rev elif isPrime(num): return number, num elif isPrime(rev): return number, rev else: return False digits = [5,2,1,7] print(solve(digits))
输入
[5,2,1,7]
输出
(1257, 17, 71)
广告