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

ตรวจสอบว่า N เป็นจำนวนเฉพาะไดฮีดรัล (Dihedral Prime) หรือไม่ ใน Python


ปัญหา

จำนวนเฉพาะไดฮีดรัล คือ จำนวนที่เป็นเฉพาะ และเมื่อแสดงบนหน้าจอ 7-segment แล้วหมุนหรือพลิก ค่าที่ได้ก็ยังเป็นจำนวนเฉพาะ (อาจเป็นตัวเลขเดิมหรือตัวเลขอื่น)

เงื่อนไข

  • ตัวเลขต้องประกอบด้วยหลักที่หมุน/พลิกได้ใน 7-segment เท่านั้น (0,1,2,5,8) — ไม่สามารถมี 3,4,6,7,9
  • ตัวเลขเองต้องเป็นจำนวนเฉพาะ
  • ตัวเลขที่พลิกแล้ว (2↔5) ต้องเป็นเฉพาะ
  • ตัวเลขที่กลับลำดับ (reverse) ต้องเป็นเฉพาะ
  • ตัวเลขที่พลิกแล้วและกลับลำดับ ต้องเป็นเฉพาะ

ตัวอย่าง

n = 1181 → เป็นจำนวนเฉพาะ พลิกได้ (1181) กลับลำดับได้ (1811) พลิก+กลับลำดับได้ (1811) ทั้งหมดเป็นเฉพาะ → True

โค้ดตัวอย่าง

def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return False
    return True

def reverse_num(n):
    return int(str(n)[::-1])

def upside_down(n):
    mapping = {'0':'0','1':'1','2':'5','5':'2','8':'8'}
    try:
        return int(''.join(mapping[d] for d in str(n)[::-1]))
    except KeyError:
        return -1  # มีหลักที่พลิกไม่ได้

def solve(n):
    if not is_prime(n):
        return False
    ud = upside_down(n)
    if ud == -1 or not is_prime(ud):
        return False
    rev = reverse_num(n)
    if not is_prime(rev):
        return False
    rev_ud = reverse_num(ud)
    if not is_prime(rev_ud):
        return False
    return True

print(solve(1181))  # True

อินพุต / เอาต์พุต

Input:  1181
Output: True