ปัญหา
จำนวนเฉพาะไดฮีดรัล คือ จำนวนที่เป็นเฉพาะ และเมื่อแสดงบนหน้าจอ 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