मान लीजिए कि हमारे पास एक संख्या n है, हमें यह जांचना है कि n एक आदिम अभाज्य है या नहीं। एक संख्या को प्राइमरी अभाज्य कहा जाता है जब यह pN# + 1 या pN# - 1 के रूप की अभाज्य संख्या होती है, जहाँ pN# pN के प्राइमरी को इस तरह इंगित करता है कि पहले N अभाज्य संख्याओं का गुणनफल।
इसलिए, अगर इनपुट 29 की तरह है, तो आउटपुट ट्रू होगा क्योंकि 29 फॉर्म का प्राइमरी प्राइम है pN-1 अगर N=3, प्रिमोरियल 2*3*5 =30 और 30-1 =29 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- अधिकतम:=100000
- प्राइम:=MAX आकार की सूची और ट्रू से भरें
- गिरफ्तारी:=एक नई सूची
- एक फ़ंक्शन को परिभाषित करें SieveOfEratosthenes() । इसमें लगेगा
- प्री के लिए 2 से लेकर int तक ((MAX) का वर्गमूल) + 1, करें
- अगर प्राइम [प्राइ] ट्रू के समान है, तो
- आई रेंज में pri * 2 से MAX के लिए, प्रत्येक चरण में pri द्वारा अपडेट करें, do
- प्राइम[i] :=गलत
- आई रेंज में pri * 2 से MAX के लिए, प्रत्येक चरण में pri द्वारा अपडेट करें, do
- अगर प्राइम [प्राइ] ट्रू के समान है, तो
- 2 से MAX की श्रेणी के लिए, करें
- यदि अभाज्य[pri] शून्य नहीं है, तो
- गिरफ्तारी के अंत में pri डालें
- यदि अभाज्य[pri] शून्य नहीं है, तो
- मुख्य विधि से, निम्न कार्य करें -
- यदि अभाज्य[n] शून्य है, तो
- झूठी वापसी
- उत्पाद:=1, i:=0
- उत्पाद
- उत्पाद:=उत्पाद * गिरफ्तारी[i]
- यदि उत्पाद + 1 n के समान है या उत्पाद -1, n के समान है, तो
- सही लौटें
- i :=i + 1
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
from math import sqrt MAX = 100000 prime = [True] * MAX arr = [] def SieveOfEratosthenes() : for pri in range(2, int(sqrt(MAX)) + 1) : if prime[pri] == True : for i in range(pri * 2 , MAX, pri) : prime[i] = False for pri in range(2, MAX) : if prime[pri] : arr.append(pri) def check_primorial_prime(n) : if not prime[n] : return False product, i = 1, 0 while product < n : product *= arr[i] if product + 1 == n or product - 1 == n : return True i += 1 return False SieveOfEratosthenes() n = 29 print(check_primorial_prime(n))
इनपुट
29
आउटपुट
True