Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ตรวจสอบว่า N เป็น Dihedral Prime Number หรือไม่ใน Python


สมมติว่าเรามีตัวเลข n เราต้องตรวจสอบว่า n เป็นไดฮีดรัลไพรม์หรือไม่ กล่าวได้ว่าตัวเลขเป็นจำนวนเฉพาะแบบไดฮีดรัลเมื่อตัวเลขนั้นเป็นจำนวนเฉพาะและยังแสดงตัวเลขเดียวกันหรือจำนวนเฉพาะอื่นๆ โดยใช้การแสดงผลแบบ 7 ส่วนโดยไม่คำนึงถึงการวางแนวของหน้าจอ (ปกติหรือคว่ำหน้า)

ดังนั้นหากอินพุตเท่ากับ n =1181 เอาต์พุตจะเป็น True

ตรวจสอบว่า N เป็น Dihedral Prime Number หรือไม่ใน Python

อันที่สองเป็นรูปแบบคว่ำของอันแรกและทั้งคู่เป็นจำนวนเฉพาะ

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดฟังก์ชัน up_side_down() นี่จะใช้เวลา n
  • อุณหภูมิ :=n, รวม :=0
  • ในขณะที่อุณหภูมิ> 0 ทำ
    • d :=ตัวดัดแปลงชั่วคราว 10
    • ถ้า d เหมือนกับ 2 แล้ว d :=5
    • มิฉะนั้นเมื่อ d เท่ากับ 5 แล้ว d :=2
    • ผลรวม :=ทั้งหมด * 10 + วัน
    • อุณหภูมิ :=ผลหารของ (อุณหภูมิ / 10)
  • ผลตอบแทนรวม
  • จากวิธีหลัก ให้ทำดังนี้:
  • ถ้า n ไม่ใช่จำนวนเฉพาะหรือ up_side_down(n) ไม่ใช่จำนวนเฉพาะหรือย้อนกลับของ n ไม่ใช่จำนวนเฉพาะหรือส่วนกลับของ up_side_down(n) ไม่ใช่จำนวนเฉพาะ ดังนั้น
    • คืนค่าเท็จ
  • อุณหภูมิ :=n
  • ในขณะที่อุณหภูมิ> 0 ทำ
    • rem :=temp mod 10
    • ถ้า rem เป็นอย่างใดอย่างหนึ่ง [3, 4, 6, 7, 9] แล้ว
      • คืนค่าเท็จ
    • อุณหภูมิ :=ผลหารของ (อุณหภูมิ / 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