用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
广告