Computer >> Máy Tính >  >> Lập trình >> Python

Kiểm tra xem N có phải là số nguyên tố nhị diện hay không trong Python

Giả sử chúng ta có một số n. Ta phải kiểm tra xem n có phải là số nguyên tố nhị diện hay không. Một số được cho là số nguyên tố nhị diện khi bản thân số đó là số nguyên tố và cũng được hiển thị cùng một số hoặc bất kỳ số nguyên tố nào khác bằng cách sử dụng màn hình 7 đoạn bất kể hướng của màn hình (bình thường hay từ trên xuống).

Vì vậy, nếu đầu vào là n =1181, thì đầu ra sẽ là True

Kiểm tra xem N có phải là số nguyên tố nhị diện hay không trong Python

định dạng thứ hai là định dạng từ trên xuống của định dạng đầu tiên và cả hai đều là số nguyên tố.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một hàm up_side_down (). Điều này sẽ mất n
  • tạm thời:=n, tổng:=0
  • while temp> 0, do
    • d:=temp mod 10
    • nếu d giống với 2, thì d:=5
    • ngược lại khi d giống với 5 thì d:=2
    • tổng số:=tổng số * 10 + d
    • temp:=thương số của (temp / 10)
  • tổng trả lại
  • Từ phương thức chính, hãy làm như sau:
  • nếu n không phải là số nguyên tố hoặc up_side_down (n) không phải là số nguyên tố hoặc đảo ngược của n không phải là số nguyên tố hoặc đảo ngược của up_side_down (n) không phải là số nguyên tố, thì
    • trả về Sai
  • tạm thời:=n
  • while temp> 0, do
    • rem:=temp mod 10
    • nếu rem là bất kỳ [3, 4, 6, 7, 9] nào, thì
      • trả về Sai
    • temp:=thương số của (temp / 10)
  • trả về True

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Mã mẫu

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))

Đầu vào

23, 3

Đầu ra

True