使用 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
  • 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)

更新于: 2021年1月15日

181 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告