สมมติว่าเรามีตัวเลข n เราต้องตรวจสอบว่า n เป็นไดฮีดรัลไพรม์หรือไม่ กล่าวได้ว่าตัวเลขเป็นจำนวนเฉพาะแบบไดฮีดรัลเมื่อตัวเลขนั้นเป็นจำนวนเฉพาะและยังแสดงตัวเลขเดียวกันหรือจำนวนเฉพาะอื่นๆ โดยใช้การแสดงผลแบบ 7 ส่วนโดยไม่คำนึงถึงการวางแนวของหน้าจอ (ปกติหรือคว่ำหน้า)
ดังนั้นหากอินพุตเท่ากับ n =1181 เอาต์พุตจะเป็น True
อันที่สองเป็นรูปแบบคว่ำของอันแรกและทั้งคู่เป็นจำนวนเฉพาะ
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดฟังก์ชัน 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