用Python檢查N是否為二面體素數


假設我們有一個數字n。我們必須檢查n是否為二面體素數。當一個數字本身是素數,並且無論顯示器的方向(正常或倒置)如何,使用7段顯示器都能顯示相同的數字或任何其他素數時,這個數字就被稱為二面體素數。

因此,如果輸入為n = 1181,則輸出為True

第二個是第一個的倒置形式,兩者都是素數。

為了解決這個問題,我們將遵循以下步驟:

  • 定義一個函式up_side_down()。這將接收n
  • temp := n,total := 0
  • 當temp > 0時,執行以下操作:
    • d := temp mod 10
    • 如果d等於2,則d := 5
    • 否則,如果d等於5,則d := 2
    • total := total * 10 + d
    • temp := (temp / 10)的商
  • 返回total
  • 從主方法執行以下操作:
  • 如果n不是素數,或者up_side_down(n)不是素數,或者n的反轉不是素數,或者up_side_down(n)的反轉不是素數,則
    • 返回False
  • temp := n
  • 當temp > 0時,執行以下操作:
    • rem := temp mod 10
    • 如果rem是[3, 4, 6, 7, 9]中的任何一個,則
      • 返回False
    • temp := (temp / 10)的商
  • 返回True

讓我們看看下面的實現,以便更好地理解:

示例程式碼

線上演示

prime = (int(1e5)+5)*[True]
def reverse(n):
   return int(str(n)[::-1])
 
def up_side_down(n):
   temp = n
   total = 0
   while temp>0:
      d = temp % 10
      if d == 2:
         d = 5
      elif d == 5:
         d = 2
      total = total * 10 + d
      temp//= 10
 
   return total
 
def get_all_prime():
   prime[0] = prime[1] = False
 
   for i in range(2, int(1e5)+1):
      j = 2
      while i * j<= int(1e5):
         prime[i * j] = False
         j+= 1
 
def solve(n):
   get_all_prime()
   if not prime[n] or not prime[up_side_down(n)] or not prime[reverse(n)] or not prime[reverse(up_side_down(n))]:
      return False
 
   temp = n
 
   while temp>0:
      rem = temp % 10;
      if rem in [3, 4, 6, 7, 9]:
         return False
      temp //= 10
 
   return True

n = 1181
print(solve(n))

輸入

23, 3

輸出

True

更新於:2021年1月16日

瀏覽量:156

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.