使用 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 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告