मान लीजिए कि हमारे पास एक संख्या n है। हमें जांचना है कि n डायहेड्रल प्राइम है या नहीं। एक संख्या को डायहेड्रल प्राइम कहा जाता है जब वह संख्या स्वयं अभाज्य होती है और 7-सेगमेंट डिस्प्ले का उपयोग करके समान संख्या या कोई अन्य अभाज्य संख्या भी दिखाई जाती है, भले ही डिस्प्ले का ओरिएंटेशन (सामान्य या ऊपर की ओर) कुछ भी हो।
इसलिए, यदि इनपुट n =1181 जैसा है, तो आउटपुट सही होगा
दूसरा वाला पहले वाले का अप-साइड डाउन फॉर्मेट है और दोनों प्राइम हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक फ़ंक्शन को परिभाषित करें 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, करते हैं
- रेम:=अस्थायी मोड 10
- यदि रेम इनमें से कोई है [3, 4, 6, 7, 9], तो
- झूठी वापसी
- अस्थायी:=(अस्थायी/10) का भागफल
- सही लौटें
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण कोड
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