用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

开启您的职业生涯

通过完成课程获得认证

开始学习
广告