प्रधानता परीक्षण: Difference between revisions

From Vigyanwiki
No edit summary
 
(22 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Short description|Algorithm for determining whether a number is prime}}
{{Short description|Algorithm for determining whether a number is prime}}
एक '''प्रधानता परीक्षण''' यह निर्धारित करने के लिए एक [[ कलन विधि |एल्गोरिदम (कलन विधि)]] है कि कोई इनपुट संख्या [[अभाज्य संख्या|अभाज्य]] है या नहीं है। [[गणित]] के अन्य क्षेत्रों में इसका उपयोग [[क्रिप्टोग्राफी]] के लिए किया जाता है। [[पूर्णांक गुणनखंडन]] के विपरीत, प्रधानता परीक्षण आम तौर पर [[प्रमुख कारण]] नहीं देते हैं, केवल यह बताते हैं कि इनपुट संख्या [[अभाज्य संख्या|अभाज्य]] है या नहीं है। गुणनखंडन को अभिकलनीय रूप से कठिन समस्या माना जाता है, जबकि प्रधानता परीक्षण तुलनात्मक रूप से आसान है (इनपुट के आकार में इसका [[कार्यावधि]] [[बहुपद]] है)। कुछ प्रधानता परीक्षण सिद्ध करते हैं कि एक संख्या अभाज्य है, जबकि मिलर-राबिन जैसे अन्य यह सिद्ध करते हैं कि एक संख्या [[समग्र|भाज्य]] है। इसलिए, बाद वाले को प्रधानता परीक्षणों के बजाय अधिक सटीक रूप से ''समग्रता परीक्षण'' कहा जा सकता है।
एक '''प्रारंभिक परीक्षण''' यह निर्धारित करने के लिए एक [[ कलन विधि |एल्गोरिदम]] है कि कोई इनपुट संख्या [[अभाज्य संख्या|अभाज्य]] है या नहीं है। [[गणित]] के अन्य क्षेत्रों में इसका उपयोग [[क्रिप्टोग्राफी]] के लिए किया जाता है। [[पूर्णांक गुणनखंडन]] के विपरीत, प्रारंभिक परीक्षण आम तौर पर [[प्रमुख कारण]] नहीं देते हैं, केवल यह बताते हैं कि इनपुट संख्या [[अभाज्य संख्या|अभाज्य]] है या नहीं है। गुणनखंडन को अभिकलनीय रूप से कठिन समस्या माना जाता है, जबकि प्रारंभिक परीक्षण तुलनात्मक रूप से आसान है (इनपुट के आकार में इसका चलने का समय बहुपद है)। कुछ प्रारंभिक परीक्षण सिद्ध करते हैं कि एक संख्या अभाज्य है, जबकि मिलर-राबिन जैसे अन्य यह सिद्ध करते हैं कि एक संख्या [[समग्र|भाज्य]] है। इसलिए, बाद वाले को प्रारंभिक परीक्षणों के बजाय अधिक सटीक रूप से ''समग्रता परीक्षण'' कहा जा सकता है।


== सरल विधियाँ ==
== सरल तरीके ==


सरलतम प्रधानता ''[[परीक्षण परीक्षण|परीक्षण ट्रायल]]'' विभाजन है: एक इनपुट संख्या दी गई है, n, जांचें कि क्या यह 2 और √n के बीच किसी भी [[अभाज्य संख्या]] से समान रूप से [[विभाज्य]] है (यानी कि विभाजन कोई [[शेष]] नहीं छोड़ता है)। यदि ऐसा है, तो n [[समग्र]] है। अन्यथा, यह अभाज्य है।<ref name="Riesel2-3">Riesel (1994) pp.2-3</ref> वास्तव में, किसी भी भाजक <math>p>\sqrt n</math> के लिए,  एक और भाजक <math>n/p < \sqrt n</math> होना चाहिए, और इसलिए {{sqrt|n}} से छोटे भाजक की खोज करना पर्याप्त है।
सबसे सरल प्रारंभिक ''[[परीक्षण परीक्षण|परीक्षण ट्रायल]]'' विभाजन है: एक इनपुट संख्या दी गई है, n, जांचें कि क्या यह 2 और √n के बीच किसी भी [[अभाज्य संख्या]] से समान रूप से [[विभाज्य]] है (यानी कि विभाजन कोई [[शेष]] नहीं छोड़ता है)। यदि ऐसा है, तो n [[समग्र|भाज्य]] है, नहीं तो अभाज्य है।<ref name="Riesel2-3">Riesel (1994) pp.2-3</ref> वास्तव में, किसी भी भाजक <math>p>\sqrt n</math> के लिए,  एक और भाजक <math>n/p < \sqrt n</math> होना चाहिए, और इसलिए {{sqrt|n}} से छोटे भाजक खोजना पर्याप्त है।


उदाहरण के लिए, संख्या 100 पर विचार करें, जो इन संख्याओं से समान रूप से विभाज्य है:
उदाहरण के लिए, संख्या 100 पर विचार करें, जो इन संख्याओं से समान रूप से विभाज्य है:
Line 10: Line 10:
: 2, 4, 5, 10, 20, 25, 50
: 2, 4, 5, 10, 20, 25, 50


ध्यान दें कि सबसे बड़ा गुणक, 50, 100 का आधा है। यह सभी ''n'' के लिए सत्य है: सभी विभाजक ''n/2'' से कम या उसके बराबर हैं।
ध्यान दें कि सबसे बड़ा गुणक, 50, 100 का आधा है। यह सभी ''n'' के लिए सही है: सभी विभाजक ''n/2'' से कम या उसके बराबर हैं।


जब n/2 तक के सभी संभावित विभाजकों का परीक्षण किया जाता है, तो कुछ गुणनखंड ''दो बार'' खोजे जाएंगे। इसे देखने के लिए, विभाजकों की सूची को गुणनफलो की सूची के रूप में फिर से लिखें, प्रत्येक 100 के बराबर:
जब n/2 तक के सभी संभावित विभाजकों का परीक्षण किया जाता है, तो कुछ गुणक''दो बार'' खोजे जाएंगे। इसे देखने के लिए, विभाजकों की सूची को गुणनफलो की सूची के रूप में फिर से लिखें, प्रत्येक 100 के बराबर:


:{{math|2 × 50,  4 × 25,  5 × 20,  10 × 10,  20 × 5,  25 × 4,  50 × 2}}
:{{math|2 × 50,  4 × 25,  5 × 20,  10 × 10,  20 × 5,  25 × 4,  50 × 2}}


ध्यान दें कि 10 × 10 के बाद के गुणनफल केवल दोहराई संख्याएँ हैं जो पूर्व गुणनफलो, केवल [[क्रमविनिमेयता]] में दिखाई देती थी। उदाहरण के लिए, 5 × 20 और 20 × 5 के विपरीत क्रम में समान संख्याएँ हैं। यह सभी n के लिए सत्य है: n के सभी अद्वितीय विभाजक {{sqrt|''n''}} से कम या उसके बराबर संख्याएँ हैं, इसलिए हमें इससे आगे की खोज करने की आवश्यकता नहीं है।<ref name="Riesel2-3"/>  (इस उदाहरण में, {{sqrt|''n''}} = {{sqrt|100}} = 10.)
ध्यान दें कि 10 × 10 के बाद के गुणनफल केवल दोहराए गए नंबर हैं जो पहले के गुणनफलो, [[क्रमविनिमेयता|कम्यूटेड में]] दिखाई देते थे। उदाहरण के लिए, 5 × 20 और 20 × 5 के विपरीत क्रम में समान संख्याएँ हैं। यह सभी n के लिए सही है: n के सभी अद्वितीय विभाजक {{sqrt|''n''}} से कम या उसके बराबर संख्याएँ हैं, इसलिए हमें उससे आगे की खोज करने की आवश्यकता नहीं है।<ref name="Riesel2-3"/>  (इस उदाहरण में, {{sqrt|''n''}} = {{sqrt|100}} = 10) है |


''2'' से बड़ी सभी सम संख्याओं को भी हटाया जा सकता है: यदि एक सम संख्या ''n'' को विभाजित कर सकती है, तो वह 2 को भी विभाजित कर सकती है।
''2'' से बड़ी सभी सम संख्याओं को भी हटाया जा सकता है: यदि एक सम संख्या ''n'' को विभाजित कर सकती है, तो 2 को भी कर सकती है।


एक उदाहरण 17 के प्रधानता का परीक्षण करने के लिए ट्रायल विभाजन का उपयोग करना है। हमें केवल {{sqrt|''n''}} तक के विभाजकों के लिए परीक्षण की आवश्यकता है, अर्थात पूर्णांक से कम या उसके बराबर <math>\scriptstyle \sqrt{17} \approx 4.12</math>, जैसे कि 2, 3,और 4 है| ''4'' को छोड़ दिया जा सकता है क्योंकि यह एक सम संख्या है: यदि 4 समान रूप से 17 को विभाजित कर सकता है, तो ''2'' भी होगा, और 2 पहले से ही सूची में है। वह 2 और 3 छोड़ देता है। इनमें से प्रत्येक संख्या के साथ 17 को विभाजित करें, और हम पाते हैं कि कोई भी 17 को समान रूप से विभाजित नहीं करता है - दोनों विभाजन शेष छोड़ते हैं। इसलिए, 17 अभाज्य है।
एक उदाहरण 17 की प्रारंभिकता का परीक्षण करने के लिए ट्रायल विभाजन का उपयोग करना है। हमें केवल {{sqrt|''n''}} तक के विभाजकों के लिए परीक्षण की आवश्यकता है, अर्थात पूर्णांक से कम या उसके बराबर <math>\scriptstyle \sqrt{17} \approx 4.12</math>, अर्थात् 2, 3,और 4 है| ''4'' को छोड़ दिया जा सकता है क्योंकि यह एक सम संख्या है: यदि 4 समान रूप से 17 को विभाजित कर सकता है, तो ''2'' भी होगा, और 2 पहले से ही सूची में है। वह 2 और 3 छोड़ देता है। इनमें से प्रत्येक संख्या के साथ 17 को विभाजित करें, और हम पाते हैं कि कोई भी 17 को समान रूप से विभाजित नहीं करता है - दोनों विभाजन शेष छोड़ते हैं। इसलिए, 17 अभाज्य है।


इस विधि में और सुधार किया जा सकता है। ध्यान दें कि 3 से बड़ी सभी अभाज्य संख्याएँ {{math|size=100%|1=6''k'' ± 1}} के रूप की होती हैं, जहाँ k 0 से बड़ा कोई पूर्णांक है। ऐसा इसलिए है क्योंकि सभी पूर्णांकों को {{math|size=100%|1=(6''k'' + ''i'')}} के रूप में व्यक्त किया जा सकता है, जहाँ i = -1, 0, 1, 2, 3, या 4 है। ध्यान दें कि 2 {{math|size=100%|1=(6''k'' + 0), (6''k'' + 2), और (6''k'' + 4)}} को विभाजित करता है और 3 {{math|size=100%|1=(6''k'' + 3)}} को विभाजित करता है। इसलिए, एक और भी दक्षविधि का यह परीक्षण है कि क्या n ''2'' या 3 से विभाज्य है, फिर <math>\scriptstyle 6k \ \pm \ 1 \leq\sqrt n</math> के रूप की सभी संख्याओं की जांच करना है। यह {{sqrt|''n''}} तक की सभी संख्याओं के परीक्षण से 3 गुना तेज है।
इस तरीके में और सुधार किया जा सकता है। ध्यान दें कि 3 से बड़ी सभी अभाज्य संख्याएँ {{math|size=100%|1=6''k'' ± 1}} के रूप की होती हैं, जहाँ k 0 से बड़ा कोई पूर्णांक है। ऐसा इसलिए है क्योंकि सभी पूर्णांकों को {{math|size=100%|1=(6''k'' + ''i'')}} के रूप में व्यक्त किया जा सकता है, जहाँ i = -1, 0, 1, 2, 3, या 4 है। ध्यान दें कि 2 {{math|size=100%|1=(6''k'' + 0), (6''k'' + 2), और (6''k'' + 4)}} को विभाजित करता है और 3 {{math|size=100%|1=(6''k'' + 3)}} को विभाजित करता है। इसलिए, एक और भी सक्षम विधि यह जांचना है कि क्या n ''2'' या 3 से विभाज्य है, फिर <math>\scriptstyle 6k \ \pm \ 1 \leq\sqrt n</math> के रूप की सभी संख्याओं की जांच करना है। यह {{sqrt|''n''}} तक की सभी संख्याओं के परीक्षण से 3 गुना तेज है।


आगे सामान्यीकरण करते हुए, c# (c [[प्रिमोरियल]]) से बड़े सभी अभाज्य c# · k + i, i < c# के लिए, जहाँ c और k पूर्णांक हैं और i उन संख्याओं का निरुपण  करता है जो c# के लिए [[सहअभाज्य]] हैं। उदाहरण के लिए, मान लीजिए {{math|size=100%|1=''c'' = 6}} है     और फिर {{math|size=100%|1=''c''# = 2 &middot; 3 &middot; 5  = 30}} है| सभी पूर्णांक {{math|size=100%|1=30''k'' + ''i''}} के रूप में हैं, i में {{math|size=100%|1=''i'' = 0, 1, 2,...,29}} और k एक पूर्णांक है। हालाँकि, 2  0, 2, 4,..., 28 को विभाजित करता है; 3 0, 3, 6, ..., 27 को विभाजित करता है; और 5  0, 5, 10, ..., 25 को विभाजित करता है। अतः 30 से बड़ी सभी अभाज्य संख्याएँ{{math|size=100%|1=''i'' = 1, 7, 11, 13, 17, 19, 23, 29}} के लिए 30k + i के रूप की होती हैं (अर्थात {{math|size=100%|1=''i'' < 30}} के लिए जैसे कि gcd(i,30) = 1)। '''ध्यान दें कि यदि i और 30 सहअभाज्य नहीं थे,''' तब {{math|size=100%|1=30''k'' + ''i''}} 30 के प्रधान भाजक, अर्थात् 2, 3, या 5 से विभाज्य होगा, और इसलिए अभाज्य नहीं होगा। नकारात्मक i की अनुमति देने की पिछली विधि से मिलान करने के लिए, प्रत्येक i को 1 से c#-1 तक जाँचने के बजाय (क्योंकि 0 और c# हमेशा सम होते हैं), प्रत्येक i को 1 से जाँचें {{sfrac|''c''#|2}}, जो मानों i की सूची होगी जैसे कि सभी पूर्णांक फॉर्म के हैं {{math|size=100%|1=''c''#''k'' ± ''i''}}. इस उदाहरण में, {{math|size=100%|1=30''k'' ± ''i''}} के लिए {{math|size=100%|1=''i'' = 1, 7, 11, 13}}. ध्यान दें कि इस सूची में हमेशा 1 और सी से अधिक प्राइम्स का सेट शामिल होगा लेकिन इससे छोटा होगा {{sfrac|''c''#|2}}. उपर्युक्त शर्तों को पूरा करने वाली सभी संख्याएँ अभाज्य नहीं होती हैं। उदाहरण के लिए, 437 c= 7, c#=210, k=2, i=17 के लिए c#k + i के रूप में है। हालाँकि, 437 एक मिश्रित संख्या है जो 19*23 के बराबर है। इसीलिए दिए गए फॉर्म की संख्याओं को अभी भी आदिमता के लिए परखने की आवश्यकता है।
आगे सामान्यीकरण करते हुए, c# (c [[प्रिमोरियल]]) से बड़े सभी अभाज्य c# · k + i, i < c# के लिए, जहाँ c और k पूर्णांक हैं और i उन संख्याओं का प्रस्तुत करता है जो c# के लिए [[सहअभाज्य]] हैं। उदाहरण के लिए, मान लीजिए {{math|size=100%|1=''c'' = 6}} है| तब {{math|size=100%|1=''c''# = 2 &middot; 3 &middot; 5  = 30}} है| सभी पूर्णांक {{math|size=100%|1=30''k'' + ''i''}} के रूप में हैं, i में {{math|size=100%|1=''i'' = 0, 1, 2,...,29}} और k एक पूर्णांक है। हालाँकि, 2  0, 2, 4,..., 28 को विभाजित करता है; 3 0, 3, 6, ..., 27 को विभाजित करता है; और 5  0, 5, 10, ..., 25 को विभाजित करता है। अतः 30 से बड़ी सभी अभाज्य संख्याएँ {{math|size=100%|1=''i'' = 1, 7, 11, 13, 17, 19, 23, 29}} के लिए 30k + i के रूप की होती हैं (अर्थात {{math|size=100%|1=''i'' < 30}} के लिए जैसे कि gcd(i,30) = 1)। ध्यान दें कि यदि i और 30 सहअभाज्य नहीं थे, तो {{math|size=100%|1=30''k'' + ''i''}} 30 के अभाज्य भाजक, अर्थात् 2, 3, या 5 से विभाज्य होंगे, और इसलिए अभाज्य नहीं होते है। ऋणात्मक i के क्रम को पिछली विधि से सुमेल करने के लिए, प्रत्येक i को 1 से c#-1 तक जाँचने के बजाय (क्योंकि 0 और c# हमेशा सम होते हैं), प्रत्येक i को 1 से जाँचें {{sfrac|''c''#|2}}, जो मानों i की सूची होगी जैसे कि सभी पूर्णांक {{math|size=100%|1=''c''#''k'' ± ''i''}} के रूप के हैं। इस उदाहरण में, i = 1, 7, 11, 13 के लिए 30k ± i है। ध्यान दें कि इस सूची में हमेशा 1 और c से अधिक, लेकिन {{sfrac|''c''#|2}} से छोटे अभाज्यों का समुच्चय सम्मिलित होगा| उपर्युक्त शर्तों को पूरा करने वाली सभी संख्याएँ अभाज्य नहीं होती हैं। उदाहरण के लिए, 437 c= 7, c#=210, k=2, i=17 के लिए c#k + i के रूप में है। हालाँकि, 437 एक मिश्रित संख्या है जो 19*23 के बराबर है। इसीलिए दिए गए रूप (फॉर्म) की संख्याओं को अभी भी प्रारंभिकता के लिए परीक्षण की आवश्यकता है।


जैसा {{math|size=100%|1=''c'' → ∞}}, मानों की संख्या जो {{math|size=100%|1=''c''#''k'' + ''i''}} एक निश्चित सीमा को कम कर सकता है, और इसलिए n का परीक्षण करने का समय कम हो जाता है। इस विधि के लिए, सी से कम सभी प्राइम्स द्वारा विभाज्यता की जांच करना भी आवश्यक है। [[एराटोस्थनीज की छलनी]] देते हुए, पूर्ववर्ती के अनुरूप टिप्पणियों को पुनरावर्तन लागू किया जा सकता है।
चूंकि {{math|size=100%|1=''c'' → ∞}}, {{math|size=100%|1=''c''#''k'' + ''i''}} द्वारा एक निश्चित सीमा में ले जाने वाले मानों की संख्या कम हो जाती है, और इसलिए n का परीक्षण करने का समय कम हो जाता है। इस विधि के लिए, c से कम सभी अभाज्यों द्वारा विभाज्यता की जांच करना भी आवश्यक है। [[एराटोस्थनीज की छलनी|एराटोस्थनीज की सीव]] देते हुए, पूर्ववर्ती के अनुरूप टिप्पणियों को पुनरावर्ती रूप से लागू किया जा सकता है।


इन तरीकों को गति देने का एक तरीका (और नीचे उल्लिखित सभी अन्य) एक निश्चित सीमा तक सभी प्राइम्स की सूची को पूर्व-गणना और स्टोर करना है, जैसे कि 200 तक सभी प्राइम्स। (ऐसी सूची की गणना की जा सकती है एराटोस्थनीज की छलनी या एक एल्गोरिदम द्वारा जो सभी ज्ञात अभाज्य संख्याओं के विरुद्ध प्रत्येक वृद्धिशील m का परीक्षण करता है < {{sqrt|''m''}}). फिर, एक गंभीर विधि के साथ प्राथमिकता के लिए n का परीक्षण करने से पहले, n को पहले सूची से किसी भी अभाज्य द्वारा विभाज्यता के लिए जाँचा जा सकता है। यदि यह इनमें से किसी भी संख्या से विभाज्य है तो यह समग्र है, और आगे के परीक्षणों को छोड़ दिया जा सकता है।
इन तरीकों को गति देने की एक तरीका, (और नीचे उल्लिखित सभी अन्य) एक निश्चित सीमा तक सभी अभाज्यों की सूची को पूर्व-गणना और स्टोर करना है, जैसे कि 200 तक सभी अभाज्य हैं । (ऐसी सूची की गणना एराटोस्थनीज की [[एराटोस्थनीज की छलनी|सीव]] या एक एल्गोरिथ्म द्वारा की जा सकती है जो सभी ज्ञात अभाज्य < √''m'' के विरुद्ध प्रत्येक वृद्धिशील m का परीक्षण करते है)फिर, एक महत्वपूर्ण  विधि के साथ प्रारंभिकता के लिए n का परीक्षण करने से पहले, n को पहले सूची से किसी भी अभाज्य द्वारा विभाज्यता के लिए जाँचा जा सकता है। यदि यह इनमें से किसी भी संख्या से विभाज्य है तो यह भाज्य है, और आगे के परीक्षणों को छोड़ दिया जा सकता है।


एक सरल लेकिन बहुत ही अक्षम प्रधानता परीक्षण विल्सन के प्रमेय का उपयोग करता है, जिसमें कहा गया है कि पी प्रमुख है अगर और केवल अगर:
एक सरल लेकिन बहुत ही अक्षम प्रारंभिक परीक्षण [[विल्सन के प्रमेय]] का उपयोग करता है, जिसमें कहा गया है कि ''p'' प्रमुख है अगर और केवल अगर:


:<math>(p-1)! \equiv -1\pmod p \,</math>
:<math>(p-1)! \equiv -1\pmod p \,</math>
हालांकि इस पद्धति के लिए लगभग पी मोडुलो गुणन की आवश्यकता होती है, इसे अव्यावहारिक बनाने के लिए, प्राइम्स और मॉड्यूलर अवशेषों के बारे में प्रमेय कई और व्यावहारिक तरीकों का आधार बनाते हैं।
यद्यपि इस पद्धति के लिए लगभग ''p''  मॉड्यूलर गुणन की आवश्यकता होती है, इसे अप्रयोगात्मक बनाने के लिए, अभाज्यों और मॉड्यूलर अवशेषों के बारे में प्रमेय कई और प्रयोगात्मक तरीकों का आधार बनाते हैं।


=== उदाहरण कोड ===
=== उदाहरण कोड ===


==== अजगर ====
==== पायथन ====
निम्नलिखित सरल का उपयोग करते हुए [[पायथन (प्रोग्रामिंग भाषा)]] में एक सरल प्रधानता परीक्षण है {{math|size=100%|1=6''k'' ± 1}} अनुकूलन पहले उल्लेख किया। नीचे वर्णित अधिक परिष्कृत विधियाँ बड़े n.<syntaxhighlight lang= python3 > के लिए बहुत तेज़ हैं
निम्नलिखित पहले उल्लेखित सरल 6k ± 1 इष्टतमीकरण का उपयोग करते हुए पायथन में एक सरल प्रारंभिक परीक्षण है। नीचे वर्णित अधिक परिष्कृत विधियाँ बड़े ''n'' के लिए बहुत तेज़ हैं।<syntaxhighlight lang="python3"> from math import isqrt
गणित आयात से isqrt
def is_prime(n: int) -> bool:
def is_prime (n: int) -> बूल:
     if n <= 3:
     अगर एन <= 3:
         return n > 1
         रिटर्न एन> 1
     if n % 2 == 0 or n % 3 == 0:
     अगर एन% 2 == 0 या एन% 3 == 0:
         return False
         विवरण झूठा है
     limit = isqrt(n)
     सीमा = isqrt (एन)
     for i in range(5, limit+1, 6):
     मैं सीमा में (5, सीमा + 1, 6) के लिए:
         if n % i == 0 or n % (i+2) == 0:
         अगर n% i == 0 या n% (i+2) == 0:
             return False
             विवरण झूठा है
     return True
     सच लौटाओ
</वाक्यविन्यास हाइलाइट>


==== सी, सी ++, सी # और डी ====
सी, सी++, सी# & डी  
उपरोक्त के समान अनुकूलन का उपयोग करते हुए भाषाओं के C (प्रोग्रामिंग भाषा) परिवार में निम्नलिखित एक प्राथमिक परीक्षण है।
उपरोक्त के समान इष्टतमीकरण का उपयोग करते हुए निम्नलिखित भाषाओं के C परिवार में एक प्रारंभिक परीक्षण है।
<वाक्यविन्यास प्रकाश लैंग = सी #>
 
बूल इसप्राइम (इंट एन)
bool IsPrime(int n)
{
{
     अगर (एन == 2 || एन == 3)
     if (n == 2 || n == 3)
         वापसी सच;
         return true;


     अगर (एन <= 1 || एन% 2 == 0 || एन% 3 == 0)
     if (n <= 1 || n % 2 == 0 || n % 3 == 0)
         विवरण झूठा है;
         return false;


     के लिए (int i = 5; i * i <= n; i += 6)
     for (int i = 5; i * i <= n; i += 6)
     {
     {
         अगर (n% i == 0 || n% (i + 2) == 0)
         if (n % i == 0 || n % (i + 2) == 0)
             विवरण झूठा है;
             return false;
     }
     }


     वापसी सच;
     return true;
}
}
</वाक्यविन्यास हाइलाइट>


==== जावा ====
जावा
उपरोक्त के समान अनुकूलन का उपयोग करते हुए निम्नलिखित [[जावा (प्रोग्रामिंग भाषा)]] में एक प्राथमिक परीक्षण है।<syntaxhighlight lang="java">
उपरोक्त के समान इष्टतमीकरण का उपयोग करते हुए निम्नलिखित जावा में एक प्रारंभिक परीक्षण है।
 
 
import java.util.*;
import java.util.*;


Line 96: Line 95:
</syntaxhighlight>
</syntaxhighlight>


'''जावास्क्रिप्ट'''


==== [[जावास्क्रिप्ट]] ====
उपरोक्त के समान इष्टतमीकरण का उपयोग करते हुए निम्नलिखित जावास्क्रिप्ट में एक प्रारंभिक परीक्षण है।<syntaxhighlight lang="javascript">
ऊपर के समान अनुकूलन का उपयोग करते हुए निम्नलिखित जावास्क्रिप्ट में एक प्राथमिक परीक्षण है।<syntaxhighlight lang="javascript">
function isPrime(num) {
function isPrime(num) {
   if (num == 2 || num == 3)
   if (num == 2 || num == 3)
Line 111: Line 110:
</syntaxhighlight>
</syntaxhighlight>


'''आर'''


==== आर ====
उपरोक्त के समान इष्टतमीकरण का उपयोग करते हुए निम्नलिखित आर (प्रोग्रामिंग भाषा) में एक प्रारंभिक परीक्षण है।
उपरोक्त के समान अनुकूलन का उपयोग करते हुए निम्नलिखित R (प्रोग्रामिंग भाषा) में एक प्राथमिक परीक्षण है।
<syntaxhighlight lang="r">
<syntaxhighlight lang="r">
is.prime <- function(number) {
is.prime <- function(number) {
Line 137: Line 136:
</syntaxhighlight>
</syntaxhighlight>


'''डार्ट'''


==== डार्ट ====
नीचे डार्ट (प्रोग्रामिंग भाषा) में उपरोक्त के समान इष्टतमीकरण का उपयोग करते हुए एक प्रारंभिक परीक्षण है।
नीचे डार्ट (प्रोग्रामिंग_लैंग्वेज) में उपरोक्त के समान अनुकूलन का उपयोग करते हुए एक प्राथमिक परीक्षण है।
<syntaxhighlight lang="Dart">
<syntaxhighlight lang="Dart">
checkIfPrimeNumber(number) {
checkIfPrimeNumber(number) {
Line 156: Line 155:
</syntaxhighlight>
</syntaxhighlight>


'''फ़्री पास्कल'''


==== [[ फ़्री पास्कल ]]<स्पैन क्लास= एंकर आईडी= फ्रीपास्कल></span> ====
उपरोक्त के समान इष्टतमीकरण का उपयोग करते हुए [[ फ़्री पास्कल |फ़्री]] पास्कल में निम्नलिखित एक प्रारंभिक परीक्षण है।<syntaxhighlight lang="pascal">
उपरोक्त के समान अनुकूलन का उपयोग करते हुए नि: शुल्क पास्कल में निम्नलिखित एक प्राथमिक परीक्षण है।<syntaxhighlight lang="pascal">
function IsPrime(N:Integer):Boolean;
function IsPrime(N:Integer):Boolean;
var
var
Line 176: Line 175:




==== जाओ <अवधि वर्ग = लंगर आईडी = गोलांग>
 
उपरोक्त के समान अनुकूलन का उपयोग करते हुए [[गोलंग]] में निम्नलिखित एक प्राथमिक परीक्षण है।<syntaxhighlight lang="golang">
'''गो'''
उपरोक्त के समान इष्टतमीकरण का उपयोग करते हुए [[गोलंग]] में निम्नलिखित एक प्रारंभिक परीक्षण है।<syntaxhighlight lang="golang">
func IsPrime(num int) bool {
func IsPrime(num int) bool {
if num > 1 && num <= 3 {
if num > 1 && num <= 3 {
Line 197: Line 197:


== अनुमानी परीक्षण ==
== अनुमानी परीक्षण ==
ये ऐसे परीक्षण हैं जो व्यवहार में अच्छा काम करते प्रतीत होते हैं, लेकिन अप्रमाणित हैं और इसलिए, तकनीकी रूप से बोलें, एल्गोरिदम बिल्कुल भी नहीं हैं।
ये ऐसे परीक्षण हैं जो अभ्यास में अच्छा काम करते प्रतीत होते हैं, लेकिन अप्रमाणित हैं और इसलिए, तकनीकी रूप से अनुरूप (स्पीकिंग), एल्गोरिदम बिल्कुल भी नहीं हैं।
Fermat परीक्षण और फाइबोनैचि परीक्षण सरल उदाहरण हैं, और संयुक्त होने पर वे बहुत प्रभावी होते हैं। [[जॉन सेल्फ्रिज]] ने अनुमान लगाया है कि यदि p एक विषम संख्या है, और p ≡ ±2 (mod 5), तो p अभाज्य होगा यदि निम्नलिखित में से दोनों हैं:
फर्मेट परीक्षण और फिबोनाशी परीक्षण सरल उदाहरण हैं, और संयुक्त होने पर वे बहुत प्रभावी होते हैं। [[जॉन सेल्फ्रिज]] ने अनुमान लगाया है कि यदि p एक विषम संख्या है, और p ≡ ±2 (mod 5), तो p अभाज्य होगा यदि निम्नलिखित में से दोनों हैं:
* 2<sup>p−1</sup> ≡ 1 (मॉड पी),
* 2<sup>p−1</sup> ≡ 1 (mod ''p''),
* एफ<sub>''p''+1</sub> ≡ 0 (मॉड पी),
* ''f<sub>p</sub>''<sub>+1</sub> ≡ 0 (mod ''p''),
जहां <sub>k</sub>k-वें [[फाइबोनैचि संख्या]] है। पहली शर्त बेस 2 का उपयोग करते हुए फ़र्मेट प्राइमलिटी टेस्ट है।
जहां ''f<sub>k</sub>''  k-वें [[फाइबोनैचि संख्या|फिबोनैकी संख्या]] है। पहली शर्त आधार 2 का उपयोग करते हुए फ़र्मेट प्रारंभिक परीक्षण है।


सामान्य तौर पर, यदि p ≡ a (mod x<sup>2</sup>+4), जहां एक द्विघात गैर-अवशेष है (mod x<sup>2</sup>+4) तो p को अभाज्य होना चाहिए यदि निम्न स्थितियाँ हों:
सामान्य तौर पर, यदि p ≡ a (mod x<sup>2</sup>+4), जहां एक द्विघात गैर-अवशेष (mod x<sup>2</sup>+4) है तो p को अभाज्य होना चाहिए यदि निम्न स्थितियाँ हों:


* 2<sup>p−1</sup> ≡ 1 (मॉड पी),
* 2<sup>p−1</sup> ≡ 1 (mod ''p''),
* एफ (1)<sub>''p''+1</sub> ≡ 0 (मॉड पी),
* ''f''(''1'')<sub>''p''+1</sub> ≡ 0 (mod ''p''),


(एक्स)<sub>''k''</sub> x पर k-वां [[फाइबोनैचि बहुपद]] है।
f(x)k x पर k-वां [[फाइबोनैचि संख्या|फिबोनैकी]] [[फाइबोनैचि बहुपद|बहुपद]] है।
 
सेल्फ्रिज, [[कार्ल पोमेरेन्स]] और [[सैमुअल वैगस्टाफ]] मिलकर एक प्रति उदाहरण के लिए $620 की पेशकश करते हैं। समस्या अभी भी 11 सितंबर, 2015 तक खुली है।<ref>[[John Selfridge#Selfridge's conjecture about primality testing]].</ref>


सेल्फ्रिज, [[कार्ल पोमेरेन्स]] और [[सैमुअल वैगस्टाफ]] मिलकर एक गणित्र उदाहरण के लिए $620 की उपस्थिति करते हैं। समस्या अभी भी 11 सितंबर, 2015 तक खुली है।<ref>[[John Selfridge#Selfridge's conjecture about primality testing]].</ref>


== संभाव्य परीक्षण ==
== संभाव्य परीक्षण ==
<nowiki>यादृच्छिक एल्गोरिथम ह्यूरिस्टिक्स की तुलना में अधिक कठोर हैं, जिसमें वे एक समग्र संख्या द्वारा मूर्ख बनाए जाने की संभावना पर सिद्ध सीमा प्रदान करते हैं।
[[संभाव्य परीक्षण]] अनुमानों की तुलना में अधिक सख्त होते हैं, जिसमें वे एक भाज्य संख्या द्वारा फूलेड बनाए जाने की संभावना पर सिद्ध सीमाएं प्रदान करते हैं।
कई लोकप्रिय प्रधानता परीक्षण संभाव्य परीक्षण हैं। ये परीक्षण परीक्षण संख्या n के अलावा, कुछ अन्य संख्याओं का उपयोग करते हैं जिन्हें कुछ नमूना स्थान से यादृच्छिक रूप से चुना जाता है; सामान्य यादृच्छिक प्रधानता परीक्षण कभी भी अभाज्य संख्या को समग्र के रूप में रिपोर्ट नहीं करते हैं, लेकिन यह संभव है कि समग्र संख्या को प्रधान के रूप में रिपोर्ट किया जाए। a के कई स्वतंत्र रूप से चुने गए मानों के साथ परीक्षण को दोहराकर त्रुटि की संभावना को कम किया जा सकता है; दो सामान्य रूप से उपयोग किए जाने वाले परीक्षणों के लिए, किसी भी मिश्रित n के लिए कम से कम आधा a{{'}एन का पता लगाएं</nowiki>{{'}}s समग्रता, इसलिए k दोहराव त्रुटि संभावना को अधिकतम 2 तक कम कर देता है<sup>-k</sup>, जिसे k बढ़ाकर मनमाने ढंग से छोटा किया जा सकता है।
कई प्रमुख प्रारंभिक परीक्षण संभाव्य परीक्षण हैं। ये परीक्षण परीक्षण संख्या n के अलावा, कुछ अन्य संख्याओं का उपयोग करते हैं जिन्हें कुछ [[प्रतिदर्श समष्टि]] से यादृच्छिक रूप से चुना जाता है; सामान्य यादृच्छिक प्रारंभिक परीक्षण कभी भी अभाज्य संख्या को भाज्य के रूप में विवरण नहीं करते हैं, लेकिन यह संभव है कि भाज्य संख्या को अभाज्य के रूप में विवरण करते हैं। ''a'' के कई स्वतंत्र रूप से चुने गए मानों के साथ परीक्षण को दोहराकर त्रुटि की संभावना को कम किया जा सकता है; दो सामान्य रूप से उपयोग किए जाने वाले परीक्षणों के लिए, किसी भी भाज्य n के लिए कम से कम आधे n की समग्रता का पता लगाता है, इसलिए k दोहराव त्रुटि संभावना को अधिकतम 2<sup>−''k''</sup> तक कम कर देता है, जिसे k को बढ़ाकर स्वेच्छतः से छोटा किया जा सकता है।


यादृच्छिक प्रधानता परीक्षणों की मूल संरचना इस प्रकार है:
यादृच्छिक प्रारंभिक परीक्षणों की मूल संरचना इस प्रकार है:


#बेतरतीब ढंग से एक नंबर चुनें।
#यादृच्छिकता से (रैन्डम्ली) एक संख्या चुनें।
# एक और दी गई संख्या n को शामिल करते हुए समानता (चयनित परीक्षण के अनुरूप) की जाँच करें। यदि समानता सही साबित नहीं होती है, तो n एक मिश्रित संख्या है और a समग्रता का साक्षी है, और परीक्षण बंद हो जाता है।
# ''a'' और दी गई संख्या ''n'' को सम्मिलित करते हुए समिका (चयनित परीक्षण के संगत) की जाँच करें। यदि समिका सही सिद्ध नहीं होती है, तो ''n'' एक संयुक्त (भाज्य) संख्या है और ''a'' संयुक्तता का प्रमाण है, और परीक्षण बंद हो जाता है।
# आवश्यक सटीकता तक पहुंचने तक पहले चरण पर वापस जाएं।
# आवश्यक सटीकता तक पहुंचने तक पहले चरण पर वापस जाएं।


एक या अधिक पुनरावृत्तियों के बाद, यदि n एक समग्र संख्या नहीं पाई जाती है, तो इसे संभावित अभाज्य घोषित किया जा सकता है।
एक या अधिक पुनरावृत्तियों के बाद, यदि ''n'' एक भाज्य संख्या नहीं पाई जाती है, तो इसे [[संभवतः अभाज्य]] घोषित किया जा सकता है।


=== [[फर्मेट प्राइमलिटी टेस्ट]] ===
=== [[फर्मेट प्राइमलिटी टेस्ट|फर्मेट प्रारंभिक परीक्षण]] ===
सबसे सरल प्रायिकता परीक्षण फ़र्मेट प्राइमलिटी टेस्ट (वास्तव में एक सम्मिश्रता परीक्षण) है। यह निम्नानुसार काम करता है:
सबसे सरल संभाव्य परीक्षण फ़र्मेट प्रारंभिक परीक्षण (वास्तव में एक समग्रता परीक्षण) है। यह निम्नानुसार काम करता है:


: एक पूर्णांक n दिया गया है, n के लिए कुछ पूर्णांक a सहअभाज्य चुनें और a की गणना करें<sup>एन</sup><sup>− 1</sup> [[मॉड्यूलर अंकगणित]] n. यदि परिणाम 1 से भिन्न है, तो n संमिश्र है। यदि यह 1 है, तो n अभाज्य हो सकता है।
: एक पूर्णांक ''n'' दिया गया है, ''n'' के लिए कुछ पूर्णांक ''a'' सहअभाज्य चुनें और एक -1 [[के सापेक्ष]] n की गणना करें। यदि परिणाम 1 से भिन्न है, तो n भाज्य है। यदि यह 1 है, तो n अभाज्य हो सकता है।


यदि एक<sup>एन</sup><sup>−1</sup> (modulo n) 1 है लेकिन n अभाज्य नहीं है, तो n को a कहा जाता है
यदि ''a<sup>n</sup>''<sup>−1</sup> (सापेक्ष n) 1 है लेकिन n अभाज्य नहीं है, तो n को आधार a के लिए स्यूडोप्राइम कहा जाता है। अभ्यास में, हम देखते हैं कि, यदि  ''a<sup>n</sup>''<sup>−1</sup> (सापेक्ष n) 1 है, तो n आमतौर पर अभाज्य है। लेकिन यहाँ एक गणित्र उदाहरण है: यदि n = 341 और a = 2, तो
[[स्यूडोप्राइम]] टू बेस a. व्यवहार में, हम देखते हैं कि, अगर
<sup>एन</sup><sup>-1</sup> (मॉड्यूल एन)
1 है, तो n प्राय: अभाज्य है। लेकिन यहाँ एक प्रति उदाहरण है:
अगर n = 341 और a = 2, तो
: <math>2^{340} \equiv 1\pmod{341}</math>
: <math>2^{340} \equiv 1\pmod{341}</math>
भले ही 341 = 11·31 मिश्रित है। वास्तव में, 341 सबसे छोटा स्यूडोप्राइम बेस 2 है (चित्र 1 देखें
भले ही 341 = 11·31 भाज्य है। वास्तव में, 341 का सबसे छोटा स्यूडोप्राइम आधार 2 है (चित्र 1 देखें
<ref name="PSW">{{cite journal|title=The pseudoprimes to 25·10<sup>9</sup>|journal=Mathematics of Computation|date=July 1980|volume=35|issue=151|pages=1003–1026|url=https://www.math.dartmouth.edu/~carlp/PDF/paper25.pdf|author1 = [[Carl Pomerance]]|author2=[[John L. Selfridge]]|author3=[[Samuel S. Wagstaff, Jr.]]| doi=10.1090/S0025-5718-1980-0572872-7 |doi-access=free}}</ref>).
<ref name="PSW">{{cite journal|title=The pseudoprimes to 25·10<sup>9</sup>|journal=Mathematics of Computation|date=July 1980|volume=35|issue=151|pages=1003–1026|url=https://www.math.dartmouth.edu/~carlp/PDF/paper25.pdf|author1 = [[Carl Pomerance]]|author2=[[John L. Selfridge]]|author3=[[Samuel S. Wagstaff, Jr.]]| doi=10.1090/S0025-5718-1980-0572872-7 |doi-access=free}}</ref>).


केवल 21853 स्यूडोप्राइम्स बेस 2 हैं जो 2.5 से कम हैं{{e|10}} (पृष्ठ 1005 देखें <ref name="PSW"/>). इसका मतलब यह है कि n के लिए 2.5 तक{{e|10}}, अगर 2<sup>एन</sup><sup>−1</sup> (modulo n) 1 के बराबर है, तो n अभाज्य है, जब तक कि n इन 21853 स्यूडोप्राइम्स में से एक न हो।
केवल 21853 का स्यूडोप्राइम्स आधार 2 है जो 2.5{{e|10}} हैं | (पृष्ठ 1005 देखें <ref name="PSW"/>) इसका अर्थ है कि, 2.5{{e|10}} तक n के लिए, यदि ''2<sup>n</sup>''<sup>−1</sup> (सापेक्ष n) 1 के बराबर है, तो n अभाज्य है, जब तक कि n इन 21853 स्यूडोप्राइम्स में से एक न हो जाये।


कुछ समग्र संख्याएँ (कारमाइकल संख्याएँ) में यह गुण होता है कि a<sup>एन</sup><sup>− 1</sup> प्रत्येक a के लिए 1 (modulo n) है जो n के लिए सहअभाज्य है। सबसे छोटा उदाहरण n = 561 = 3·11·17 है, जिसके लिए a<sup>560 </sup> 1 (मॉड्यूल 561) सभी कोप्राइम से 561 के लिए है। फिर भी, फ़र्मेट परीक्षण का उपयोग अक्सर किया जाता है यदि संख्याओं की एक त्वरित स्क्रीनिंग की आवश्यकता होती है, उदाहरण के लिए [[आरएसए (एल्गोरिदम)]] के प्रमुख पीढ़ी चरण में।
कुछ भाज्य संख्याओं (कारमाइकल संख्याएँ) में यह गुण होता है कि ''a<sup>n</sup>'' <sup>− 1</sup> प्रत्येक a के लिए 1 (सापेक्ष n) होता है जो n के लिए सहअभाज्य है। सबसे छोटा उदाहरण n = 561 = 3·11·17 है, जिसके लिए a<sup>560 </sup> 1 (सापेक्ष 561) है, जो 561 के सभी सहअभाज्य के लिए है। फिर भी, फ़र्मेट परीक्षण का उपयोग अक्सर तब किया जाता है जब संख्याओं की एक रैपिड स्क्रीनिंग की आवश्यकता होती है | उदाहरण के लिए [[आरएसए (एल्गोरिदम)|आरएसए सार्वजनिक समाधान गूढ़लेखिकी (क्रिप्टोग्राफ़िक) एल्गोरिथम]] के प्रमुख निर्माण चरण में।


=== मिलर-राबिन और सोलोवे-स्ट्रैसन प्रधानता परीक्षण ===
=== मिलर-राबिन और सोलोवे-स्ट्रैसन प्रारंभिक परीक्षण ===
मिलर-राबिन प्राइमलिटी टेस्ट और सोलोवे-स्ट्रैसन प्राइमलिटी टेस्ट अधिक परिष्कृत वेरिएंट हैं, जो सभी कंपोजिट का पता लगाते हैं (एक बार फिर, इसका मतलब है: प्रत्येक समग्र संख्या n के लिए, कम से कम 3/4 (मिलर-राबिन) या 1/2 (सोलोवे) -स्ट्रैसन) संख्याएं एन की समग्रता के गवाह हैं)। ये समग्रता परीक्षण भी हैं।
मिलर-राबिन प्रारंभिक परीक्षण और सोलोवे-स्ट्रैसन प्रारंभिक परीक्षण अधिक परिष्कृत वेरिएंट हैं, जो सभी भाज्यों का पता लगाते हैं (एक बार फिर, इसका अर्थ है: प्रत्येक भाज्य संख्या n के लिए, कम से कम 3/4 (मिलर-राबिन) या 1/2 (सोलोवे-स्ट्रैसन) संख्याएं n की समग्रता के प्रमाण हैं)। ये समग्रता परीक्षण भी हैं।


मिलर-राबिन प्राइमलिटी टेस्ट निम्नानुसार काम करता है:
मिलर-राबिन प्रारंभिक परीक्षण निम्नानुसार काम करता है:
एक पूर्णांक n दिया गया है, कोई धनात्मक पूर्णांक a < n चुनें। चलो 2<sup>s</sup>d = n − 1, जहां d विषम है। अगर
एक पूर्णांक n दिया गया है, कुछ धनात्मक पूर्णांक a < n चुनें। माना 2<sup>s</sup>d = n − 1, जहां d विषम है। यदि


:<math>
:<math>
Line 256: Line 251:
a^{2^rd} \not\equiv -1\pmod{n}</math> सभी के लिए <math>0 \le r \le s - 1,
a^{2^rd} \not\equiv -1\pmod{n}</math> सभी के लिए <math>0 \le r \le s - 1,
</math>
</math>
तब n समग्र होता है और a समग्रता का साक्षी होता है। अन्यथा, n अभाज्य हो भी सकता है और नहीं भी।
तब n भाज्य होता है और a समग्रता का प्रमाण होता है। अन्यथा, n अभाज्य हो भी सकता है और नहीं भी सकता है ।
मिलर-राबिन परीक्षण एक [[मजबूत स्यूडोप्राइम]] परीक्षण है (देखें PSW<ref name="PSW"/>पेज 1004)
मिलर-राबिन परीक्षण एक [[मजबूत स्यूडोप्राइम|महत्वपूर्ण संभाव्य]] परीक्षण है| (देखें PSW<ref name="PSW"/>पृष्ठ 1004)


सोलोवे-स्ट्रैसन प्राइमलिटी टेस्ट एक और समानता का उपयोग करता है: एक विषम संख्या n को देखते हुए, कुछ पूर्णांक a < n चुनें, यदि
सोलोवे-स्ट्रैसन प्रारंभिक परीक्षण एक और समता का उपयोग करता है: एक विषम संख्या n को देखते हुए, कुछ पूर्णांक a < n चुनें, यदि


:<math> a^{(n-1)/2} \not\equiv \left(\frac{a}{n}\right) \pmod n</math>, कहाँ <math>\left(\frac{a}{n}\right)</math> [[जैकोबी प्रतीक]] है,
:<math> a^{(n-1)/2} \not\equiv \left(\frac{a}{n}\right) \pmod n</math>, कहाँ <math>\left(\frac{a}{n}\right)</math> [[जैकोबी प्रतीक]] है,


तब n समग्र होता है और a समग्रता का साक्षी होता है। अन्यथा, n अभाज्य हो भी सकता है और नहीं भी।
तब n भाज्य होता है और a समग्रता का प्रमाण होता है। अन्यथा, n अभाज्य हो भी सकता है और नहीं भी सकता है ।
सोलोवे-स्ट्रैसन टेस्ट एक [[यूलर स्यूडोप्राइम]] टेस्ट है (देखें PSW<ref name="PSW"/>पेज 1003)
सोलोवे-स्ट्रैसन परीक्षण एक [[यूलर स्यूडोप्राइम|यूलर]] [[मजबूत स्यूडोप्राइम|संभाव्य]] परीक्षण है| (देखें PSW<ref name="PSW"/>पृष्ठ 1003)


के प्रत्येक व्यक्तिगत मूल्य के लिए, सोलोवे-स्ट्रैसन परीक्षण मिलर-राबिन परीक्षण से कमजोर है। उदाहरण के लिए, यदि n = 1905 और a = 2 है, तो मिलर-राबिन परीक्षण से पता चलता है कि n समग्र है, लेकिन सोलोवे-स्ट्रैसन परीक्षण नहीं है। ऐसा इसलिए है क्योंकि 1905 एक यूलर है
''a'' के प्रत्येक विशेष मान के लिए, सोलोवे-स्ट्रैसन परीक्षण मिलर-राबिन परीक्षण से खराब है। उदाहरण के लिए, यदि ''n = 1905'' और ''a = 2'' है, तो मिलर-राबिन परीक्षण से पता चलता है कि ''n'' भाज्य है, लेकिन सोलोवे-स्ट्रैसन परीक्षण नहीं है। ऐसा इसलिए है क्योंकि ''1905'' एक यूलर स्यूडोप्राइम आधार 2 नहीं है(यह PSW के चित्र 1 में दिखाया गया है<ref name="PSW"/>) |
स्यूडोप्राइम बेस 2 लेकिन एक मजबूत स्यूडोप्राइम बेस 2 नहीं (यह PSW के चित्र 1 में दिखाया गया है<ref name="PSW"/>).


=== फ्रोबेनियस प्राइमलिटी टेस्ट ===
=== फ्रोबेनियस प्रारंभिक परीक्षण ===
मिलर-राबिन और सोलोवे-स्ट्रैसन प्रधानता परीक्षण सरल हैं और अन्य सामान्य प्रधानता परीक्षणों की तुलना में बहुत तेज़ हैं। कुछ मामलों में दक्षता में और सुधार करने का एक तरीका [[फ्रोबेनियस स्यूडोप्राइम]] है; इस परीक्षण के एक दौर में मिलर-राबिन के एक दौर की तुलना में लगभग तीन गुना अधिक समय लगता है, लेकिन मिलर-राबिन के सात दौरों की तुलना में एक संभाव्यता सीमा प्राप्त होती है।
मिलर-राबिन और सोलोवे-स्ट्रैसन प्रारंभिक परीक्षण सरल हैं और अन्य सामान्य प्रारंभिक परीक्षणों की तुलना में बहुत तेज़ हैं। कुछ स्थितियों में, दक्षता में और सुधार करने का एक तरीका [[फ्रोबेनियस स्यूडोप्राइम|फ्रोबेनियस स्यूडोप्रिमेलिटी]] परीक्षण है; इस परीक्षण के एक चक्कर में मिलर-राबिन के एक चक्कर की तुलना में लगभग तीन गुना अधिक समय लगता है, लेकिन मिलर-राबिन के सात चक्करों की तुलना में एक संभाव्यता सीमा प्राप्त होती है।


फ्रोबेनियस परीक्षण [[लुकास स्यूडोप्राइम]] परीक्षण का एक सामान्यीकरण है।
फ्रोबेनियस परीक्षण [[लुकास स्यूडोप्राइम|लुकास संभाव्य]] प्रधान परीक्षण का एक सामान्यीकरण है।


=== बैली-पीएसडब्ल्यू प्रीमैलिटी टेस्ट ===
=== बैली-पीएसडब्ल्यू प्रारंभिक परीक्षण ===
बैली-पीएसडब्लू प्रीमैलिटी टेस्ट एक संभाव्य प्राइमलिटी टेस्ट है जो एक फ़र्मेट या मिलर-राबिन टेस्ट को लुकास स्यूडोप्राइम टेस्ट के साथ जोड़ता है ताकि एक ऐसा प्राइमलिटी टेस्ट प्राप्त किया जा सके जिसका कोई ज्ञात प्रति उदाहरण नहीं है। अर्थात्, कोई ज्ञात समग्र n नहीं है जिसके लिए यह परीक्षण रिपोर्ट करता है कि n संभवतः अभाज्य है।<ref name="lpsp">{{cite journal |author1= Robert Baillie |author2= Samuel S. Wagstaff, Jr. |author-link2 = Samuel S. Wagstaff, Jr. |title= लुकास स्यूडोप्राइम्स|journal= Mathematics of Computation |date= October 1980 |volume= 35 |issue= 152 |pages= 1391–1417 |url= https://mpqs.free.fr/LucasPseudoprimes.pdf |mr= 583518| doi= 10.1090/S0025-5718-1980-0583518-6 |doi-access= free }}</ref><ref name=bpsw2>{{cite journal |author1 = Robert Baillie |author2 = Andrew Fiori |author3 = Samuel S. Wagstaff, Jr. |author-link3 = Samuel S. Wagstaff, Jr. |title=बैली-पीएसडब्ल्यू प्राइमलिटी टेस्ट को मजबूत बनाना|journal=Mathematics of Computation |date=July 2021 |volume=90 |issue=330 |pages=1931–1955 |doi=10.1090/mcom/3616 |arxiv=2006.14425 |s2cid = 220055722 }}</ref> यह दिखाया गया है कि n के लिए कोई प्रति उदाहरण नहीं है <math> < 2^{64}</math>.
[[बैली-पीएसडब्लू प्रधानता परीक्षण|बैली-पीएसडब्लू प्रारंभिक परीक्षण]] एक संभाव्य परीक्षण है जो एक फ़र्मेट या मिलर-राबिन परीक्षण को [[लुकास स्यूडोप्राइम|लुकास संभाव्य]] [[प्रधान]] परीक्षण के साथ जोड़ता है ताकि एक ऐसा प्रारंभिक परीक्षण प्राप्त किया जा सके जिसमें कोई ज्ञात गणित्र उदाहरण नहीं है। अर्थात्, कोई ज्ञात भाज्य ''n'' नहीं है जिसके लिए यह परीक्षण रिपोर्ट करता है कि ''n'' संभवतः अभाज्य है।<ref name="lpsp">{{cite journal |author1= Robert Baillie |author2= Samuel S. Wagstaff, Jr. |author-link2 = Samuel S. Wagstaff, Jr. |title= लुकास स्यूडोप्राइम्स|journal= Mathematics of Computation |date= October 1980 |volume= 35 |issue= 152 |pages= 1391–1417 |url= https://mpqs.free.fr/LucasPseudoprimes.pdf |mr= 583518| doi= 10.1090/S0025-5718-1980-0583518-6 |doi-access= free }}</ref><ref name=bpsw2>{{cite journal |author1 = Robert Baillie |author2 = Andrew Fiori |author3 = Samuel S. Wagstaff, Jr. |author-link3 = Samuel S. Wagstaff, Jr. |title=बैली-पीएसडब्ल्यू प्राइमलिटी टेस्ट को मजबूत बनाना|journal=Mathematics of Computation |date=July 2021 |volume=90 |issue=330 |pages=1931–1955 |doi=10.1090/mcom/3616 |arxiv=2006.14425 |s2cid = 220055722 }}</ref> यह दिखाया गया है कि ''n'' के लिए कोई गणित्र उदाहरण <math> < 2^{64}</math> नहीं है|


=== अन्य परीक्षण ===
=== अन्य परीक्षण ===
[[लियोनार्ड एडलमैन]] और मिंग-देह हुआंग ने [[अण्डाकार वक्र की मौलिकता साबित करना]] का एक त्रुटिहीन (लेकिन अपेक्षित बहुपद-समय) संस्करण प्रस्तुत किया। अन्य संभाव्य परीक्षणों के विपरीत, यह एल्गोरिथम एक [[प्रारंभिक प्रमाण पत्र|प्रधानता प्रमाण पत्र]] का उत्पादन करता है, और इस प्रकार यह साबित करने के लिए इस्तेमाल किया जा सकता है कि एक संख्या प्रमुख है।<ref name=AH92>{{cite book | first1=Leonard M. | last1=Adleman | author1-link=Leonard Adleman | first2=Ming-Deh | last2=Huang | title=परिमित क्षेत्र में प्राइमलिटी परीक्षण और एबेलियन किस्में| series=Lecture notes in mathematics | volume=1512 | year=1992 | isbn=3-540-55308-8 | publisher=[[Springer-Verlag]] }}</ref> अभ्यास में एल्गोरिथ्म निषेधात्मक रूप से धीमा है।
[[लियोनार्ड एडलमैन]] और मिंग-देह हुआंग ने [[अण्डाकार वक्र की मौलिकता साबित करना|दीर्घवृत्तीय वक्र]] [[बैली-पीएसडब्लू प्रधानता परीक्षण|प्रारंभिक परीक्षण]] का एक त्रुटिहीन (लेकिन अपेक्षित बहुपद-समय) भिन्नरूप प्रस्तुत किया है। अन्य संभाव्य परीक्षणों के विपरीत, यह एल्गोरिथम एक [[प्रारंभिक प्रमाण पत्र]] का निर्माण करता है, और इस प्रकार यह सिद्ध करने के लिए उपयोग किया जा सकता है कि एक संख्या अभाज्य है।<ref name=AH92>{{cite book | first1=Leonard M. | last1=Adleman | author1-link=Leonard Adleman | first2=Ming-Deh | last2=Huang | title=परिमित क्षेत्र में प्राइमलिटी परीक्षण और एबेलियन किस्में| series=Lecture notes in mathematics | volume=1512 | year=1992 | isbn=3-540-55308-8 | publisher=[[Springer-Verlag]] }}</ref> अभ्यास में एल्गोरिथ्म निषेधात्मक रूप से मध्यम है।


यदि [[ एक कंप्यूटर जितना ]] उपलब्ध थे, तो शास्त्रीय कंप्यूटरों का उपयोग करने की तुलना में [[बिग ओ नोटेशन]] का परीक्षण किया जा सकता था। शोर के एल्गोरिदम का एक संयोजन, पॉकलिंगटन प्रधानता परीक्षण के साथ एक पूर्णांक कारककरण विधि समस्या को हल कर सकती है <math>O((\log n)^3 (\log\log n)^2 \log\log\log n)</math>.<ref>{{cite arXiv |eprint=quant-ph/9508005 |last1=Chau |first1=H. F. |last2=Lo |first2=H.-K. |title=क्वांटम फैक्टराइजेशन के माध्यम से प्राइमलिटी टेस्ट|year=1995 }}</ref>
यदि [[क्वांटम कंप्यूटर]] उपलब्ध थे, तो शास्त्रीय कंप्यूटरों की तुलना में प्रारंभिक का परीक्षण [[उपगामी रूप से तेजी]] से किया जा सकता था। [[पॉकलिंगटन]] प्रारंभिक परीक्षण के साथ शोर के एल्गोरिदम का एक संयोजन, एक पूर्णांक गुणनखंडन विधि समस्या को हल कर सकती है |<math>O((\log n)^3 (\log\log n)^2 \log\log\log n)</math><ref>{{cite arXiv |eprint=quant-ph/9508005 |last1=Chau |first1=H. F. |last2=Lo |first2=H.-K. |title=क्वांटम फैक्टराइजेशन के माध्यम से प्राइमलिटी टेस्ट|year=1995 }}</ref>




== तेज नियतात्मक परीक्षण ==
== तेज नियतात्मक परीक्षण ==
20 वीं शताब्दी की शुरुआत के करीब, यह दिखाया गया था कि फर्मेट के छोटे प्रमेय का एक परिणाम प्रधानताता के परीक्षण के लिए इस्तेमाल किया जा सकता है।<ref>{{cite journal | last=Pocklington | first=H. C. | title=फर्मेट के प्रमेय द्वारा बड़ी संख्या की प्रधान या समग्र प्रकृति का निर्धारण| jfm=45.1250.02 | journal=Cambr. Phil. Soc. Proc. | volume=18 | pages=29–30 | year=1914 }}</ref> इसका परिणाम पॉकलिंगटन प्राइमलिटी टेस्ट में हुआ।<ref>{{MathWorld |urlname=PocklingtonsTheorem |title=Pocklington's Theorem}}</ref> हालाँकि, चूंकि इस परीक्षण के लिए n − 1 के आंशिक [[गुणन]]खंड की आवश्यकता होती है, सबसे खराब स्थिति में चलने का समय अभी भी काफी धीमा था। भोले-भाले तरीकों की तुलना में पहला नियतात्मक एल्गोरिथम प्राइमलिटी टेस्ट काफी तेज था, एडलमैन-पोमेरेंस-रूमली प्राइमलिटी टेस्ट था; इसका रनटाइम बिग ओ नोटेशन साबित हो सकता है ((लॉग एन)<sup>c log log log n</sup>), जहां n प्रधानताता के लिए परीक्षण की जाने वाली संख्या है और c, n से स्वतंत्र स्थिरांक है। और भी कई सुधार किए गए, लेकिन कोई भी बहुपद रनिंग टाइम साबित नहीं हो सका। (ध्यान दें कि चलने का समय इनपुट के आकार के संदर्भ में मापा जाता है, जो इस मामले में ~ लॉग एन है, जो संख्या एन का प्रतिनिधित्व करने के लिए आवश्यक बिट्स की संख्या है।) दीर्घवृत्तीय वक्र प्रधानताता को चलाने के लिए सिद्ध किया जा सकता है हे((लॉग एन)<sup>6</sup>), यदि [[विश्लेषणात्मक संख्या सिद्धांत]] पर कुछ अनुमान सत्य हैं।{{Which|date=April 2010}} इसी तरह, [[सामान्यीकृत रीमैन परिकल्पना]] के तहत, निर्धारक मिलर-राबिन प्रधानता परीक्षण#निर्धारक वेरिएंट|मिलर का परीक्षण, जो संभाव्य मिलर-राबिन परीक्षण का आधार बनाता है, को बड़े ओ नोटेशन में चलाने के लिए साबित किया जा सकता है#बचमान के लिए एक्सटेंशन- लैंडौ नोटेशन|Õ((लॉग एन)<sup>4</sup>).<ref>{{cite journal |doi=10.1016/S0022-0000(76)80043-8 |author=[[Gary L. Miller (mathematician)|Gary L. Miller]] |title=रीमैन की परिकल्पना और प्रारंभिकता के लिए परीक्षण|journal=[[Journal of Computer and System Sciences]] |volume=13 |issue=3 |pages=300–317 |year=1976|doi-access=free }}</ref> व्यवहार में, यह एल्गोरिथम संख्याओं के आकार के लिए अन्य दो की तुलना में धीमा है, जिनसे बिल्कुल भी निपटा जा सकता है। क्योंकि इन दो विधियों का कार्यान्वयन कठिन है और प्रोग्रामिंग त्रुटियों का जोखिम पैदा करता है, धीमे लेकिन सरल परीक्षणों को अक्सर प्राथमिकता दी जाती है।
20 वीं शताब्दी की शुरुआत के करीब, यह दिखाया गया था कि [[फर्मेट के छोटे प्रमेय]] का एक परिणाम प्रारंभिकता के परीक्षण के लिए उपयोग किया जा सकता है।<ref>{{cite journal | last=Pocklington | first=H. C. | title=फर्मेट के प्रमेय द्वारा बड़ी संख्या की प्रधान या समग्र प्रकृति का निर्धारण| jfm=45.1250.02 | journal=Cambr. Phil. Soc. Proc. | volume=18 | pages=29–30 | year=1914 }}</ref> इसका परिणाम [[पॉकलिंगटन प्रधानता परीक्षण|पॉकलिंगटन प्रारंभिक परीक्षण]] में हुआ है।<ref>{{MathWorld |urlname=PocklingtonsTheorem |title=Pocklington's Theorem}}</ref> हालाँकि, इस परीक्षण के लिए n − 1 के आंशिक [[गुणन]] की आवश्यकता होती है, सबसे खराब स्थिति में चलने का समय अभी भी काफी धीमा था। सरल विधियों की तुलना में पहला नियतात्मक प्रारंभिक परीक्षण साइक्लोटॉमी परीक्षण था; इसका रनटाइम O((log ''n'')<sup>''c'' log log log ''n''</sup>) सिद्ध हो सकता है, जहां ''n'' प्रारंभिकता के लिए परीक्षण की जाने वाली संख्या है और c, n से स्वतंत्र है। और भी कई सुधार किए गए, लेकिन कोई भी बहुपद रनिंग टाइम सिद्ध नहीं हो सका। (ध्यान दें कि चलने का समय इनपुट के आकार के संदर्भ में मापा जाता है, जो इस स्थिति में ~ log n है, जो संख्या n का निरूपण करने के लिए आवश्यक बिट्स की संख्या है।) यदि [[विश्लेषणात्मक संख्या सिद्धांत]] पर कुछ अनुमानित कथन सही हैं, तो [[दीर्घवृत्तीय वक्र प्रधानता परीक्षण|दीर्घवृत्तीय वक्र प्रारंभिक परीक्षण]] O((log n)6) में चलने के लिए सिद्ध किया जा सकता है।{{Which|date=April 2010}} इसी तरह, [[सामान्यीकृत रीमैन परिकल्पना]] के तहत, नियतात्मक मिलर-राबिन का परीक्षण, जो संभाव्य मिलर-राबिन परीक्षण का आधार बनाता है, को Õ((log ''n'')<sup>4</sup>) में  रन के लिए सिद्ध किया जा सकता है|<ref>{{cite journal |doi=10.1016/S0022-0000(76)80043-8 |author=[[Gary L. Miller (mathematician)|Gary L. Miller]] |title=रीमैन की परिकल्पना और प्रारंभिकता के लिए परीक्षण|journal=[[Journal of Computer and System Sciences]] |volume=13 |issue=3 |pages=300–317 |year=1976|doi-access=free }}</ref> अभ्यास में, यह एल्गोरिथम संख्याओं के आकार के लिए अन्य दो की तुलना में मध्यम है, जिनको बिल्कुल भी पार  किया जा सकता है। क्योंकि इन दो विधियों का कार्यान्वयन कठिन है और प्रोग्रामन त्रुटियों का संकट उत्पन्न करता है, निष्क्रिय लेकिन सरल परीक्षणों को अक्सर प्राथमिकता दी जाती है।


2002 में, [[मनिंद्र अग्रवाल]], [[नीरज कयाल]] और [[नितिन सक्सेना]] द्वारा पहली सिद्ध बिना शर्त नियतात्मक बहुपद समय परीक्षण का आविष्कार किया गया था। [[एकेएस प्रारंभिक परीक्षण|एकेएस प्रधानता परीक्षण]] Õ((लॉग एन) में चलता है<sup>12</sup>) (Õ((लॉग एन) में सुधार<sup>7.5</sup>)<ref name=":0">{{Cite journal|url = http://annals.math.princeton.edu/wp-content/uploads/annals-v160-n2-p12.pdf|title = प्राइम्स पी में है|last1 = Agrawal|first1 = Manindra|journal = Annals of Mathematics|doi = 10.4007/annals.2004.160.781|first2 = Neeraj|last2 = Kayal|last3 = Saxena|first3 = Nitin|year = 2004|volume = 160|issue = 2|pages = 781–793|doi-access = free}}</ref> उनके पेपर के प्रकाशित संशोधन में), जिसे आगे घटाकर Õ((लॉग एन) किया जा सकता है<sup>6</sup>) अगर [[सोफी जर्मेन प्राइम]] सच है।<ref name="AKS">{{cite journal | last1 = Agrawal | first1 = Manindra | last2 = Kayal | first2 = Neeraj | last3 = Saxena | first3 = Nitin | year = 2004 | title = PRIMES, P में है| url = http://www.cse.iitk.ac.in/users/manindra/algebra/primality_v6.pdf| journal = Annals of Mathematics | volume = 160 | issue = 2| pages = 781–793 | doi=10.4007/annals.2004.160.781| doi-access = free }}</ref> इसके बाद, लेनस्ट्रा और पोमेरेन्स ने परीक्षण का एक संस्करण प्रस्तुत किया जो समय में चलता है Õ((लॉग एन)<sup>6</sup>) बिना शर्त।<ref>{{cite web |author1=Carl Pomerance |author2=Hendrik W. Lenstra |name-list-style=amp |date=July 20, 2005 |url=http://www.math.dartmouth.edu/~carlp/PDF/complexity12.pdf |title=Primality testing with Gaussian periods}}</ref>
2002 में, [[मनिंद्र अग्रवाल]], [[नीरज कयाल]] और [[नितिन सक्सेना]] द्वारा पहली सिद्ध बिना शर्त नियतात्मक बहुपद समय परीक्षण का आविष्कार किया गया था। [[एकेएस प्रारंभिक परीक्षण|AKS प्रारंभिक परीक्षण]] Õ((log ''n'')<sup>12</sup>) में रन है <ref name=":0">{{Cite journal|url = http://annals.math.princeton.edu/wp-content/uploads/annals-v160-n2-p12.pdf|title = प्राइम्स पी में है|last1 = Agrawal|first1 = Manindra|journal = Annals of Mathematics|doi = 10.4007/annals.2004.160.781|first2 = Neeraj|last2 = Kayal|last3 = Saxena|first3 = Nitin|year = 2004|volume = 160|issue = 2|pages = 781–793|doi-access = free}}</ref> (उनके पेपर के प्रकाशित संशोधन में Õ((log ''n'')<sup>7.5</sup>) में सुधार हुआ है),जिसे आगे Õ((log ''n'')<sup>6</sup>) तक घटाया जा सकता है ) यदि सोफी जर्मेन अनुमान सत्य है।<ref name="AKS">{{cite journal | last1 = Agrawal | first1 = Manindra | last2 = Kayal | first2 = Neeraj | last3 = Saxena | first3 = Nitin | year = 2004 | title = PRIMES, P में है| url = http://www.cse.iitk.ac.in/users/manindra/algebra/primality_v6.pdf| journal = Annals of Mathematics | volume = 160 | issue = 2| pages = 781–793 | doi=10.4007/annals.2004.160.781| doi-access = free }}</ref> इसके बाद में, लेनस्ट्रा और पोमेरेन्स ने परीक्षण का एक संस्करण प्रस्तुत किया जो बिना शर्त Õ((log ''n'')<sup>6</sup>) समय में चलता है।<ref>{{cite web |author1=Carl Pomerance |author2=Hendrik W. Lenstra |name-list-style=amp |date=July 20, 2005 |url=http://www.math.dartmouth.edu/~carlp/PDF/complexity12.pdf |title=Primality testing with Gaussian periods}}</ref>
अग्रवाल, कयाल और सक्सेना अपने एल्गोरिदम का एक प्रकार सुझाते हैं जो Õ((लॉग एन) में चलेगा<sup>3</sup>) अगर अग्रवाल का अनुमान सही है; हालाँकि, हेंड्रिक लेनस्ट्रा और कार्ल पोमेरेन्स द्वारा एक अनुमानी तर्क से पता चलता है कि यह शायद गलत है।<ref name=":0" />अग्रवाल के अनुमान का एक संशोधित संस्करण, अग्रवाल-पोपोविक अनुमान,<ref>{{cite web |url=http://eprint.iacr.org/2009/008.pdf |title=अग्रवाल अनुमान पर एक नोट|first=Roman |last=Popovych |date=December 30, 2008}}</ref> अभी भी सच हो सकता है।
 
अग्रवाल, कयाल और सक्सेना अपने एल्गोरिदम का एक प्रकार प्रस्तावित करते हैं [[अग्रवाल का अनुमानित कथन]] सत्य होने पर Õ((log ''n'')<sup>3</sup>) में चलेगा; हालाँकि, हेंड्रिक लेनस्ट्रा और कार्ल पोमेरेन्स द्वारा एक अनुमानी तर्क से पता चलता है कि यह शायद गलत है।<ref name=":0" />अग्रवाल के अनुमानित कथन का एक संशोधित संस्करण, अग्रवाल-पोपोविक अनुमान,<ref>{{cite web |url=http://eprint.iacr.org/2009/008.pdf |title=अग्रवाल अनुमान पर एक नोट|first=Roman |last=Popovych |date=December 30, 2008}}</ref> अभी भी सच हो सकता है।


== जटिलता ==
== जटिलता ==
[[कम्प्यूटेशनल जटिलता सिद्धांत|अभिकलनीयतःजटिलता सिद्धांत]] में, अभाज्य संख्याओं के अनुरूप औपचारिक भाषा को PRIMES के रूप में दर्शाया जाता है। यह दिखाना आसान है कि PRIMES [[Co-NP]] में है: इसका पूरक सम्मिश्र NP में है क्योंकि एक कारक का गैर-निर्धारणात्मक रूप से अनुमान लगाकर सम्मिश्रता का निर्णय लिया जा सकता है।
[[कम्प्यूटेशनल जटिलता सिद्धांत]] में, अभाज्य संख्याओं के अनुरूप औपचारिक भाषा को PRIMES के रूप में दर्शाया जाता है। यह दिखाना आसान है कि PRIMES [[Co-NP]] में है: इसका पूरक सम्मिश्र NP में है क्योंकि एक गुणक का गैर-निर्धारणात्मक रूप से अनुमान लगाकर सम्मिश्रता का निर्णय लिया जा सकता है।


1975 में, वॉन प्रैट ने दिखाया कि बहुपद समय में जांचने योग्य प्रधानताता के लिए एक प्रमाण पत्र मौजूद था, और इस प्रकार प्राइम्स [[एनपी (जटिलता)]] में था, और इसलिए {{tmath|\mathsf{NP \cap coNP} }}. विवरण के लिए प्रधानता प्रमाण पत्र देखें।
1975 में, [[वॉन प्रैट]] ने दिखाया कि बहुपद समय में जांचने योग्य प्रारंभिकता के लिए एक प्रमाण पत्र उपस्थित था, और इस प्रकार PRIMES [[एनपी (जटिलता)|NP]] और {{tmath|\mathsf{NP \cap coNP} }} में था | विवरण के लिए प्रारंभिक प्रमाण पत्र देखें।


सोलोवे-स्ट्रैसन और मिलर-राबिन एल्गोरिदम की बाद की खोज ने PRIMES को RP (जटिलता) में डाल दिया। 1992 में, एडलमैन-हुआंग एल्गोरिथम<ref name=AH92/>जटिलता को ZPP (जटिलता) में कम कर दिया |{{tmath|1=\mathsf{ {\color{Blue} ZPP} = RP \cap coRP} }}, जिसने प्रैट के परिणाम का स्थान ले लिया।
सोलोवे-स्ट्रैसन और मिलर-राबिन एल्गोरिदम की बाद की खोज ने PRIMES को [[coRP]] में डाल दिया। 1992 में, एडलमैन-हुआंग एल्गोरिथम ने <ref name=AH92/>जटिलता को घटाकर {{tmath|1=\mathsf{ {\color{Blue} ZPP} = RP \cap coRP} }} कर दिया, जिसने प्रैट के परिणाम का स्थान ले लिया है।


1983 से एडलमैन-पोमेरेंस-रूमली प्रिमलिटी टेस्ट ने PRIMES को QP ([[अर्ध-बहुपद समय]]) में डाल दिया, जो कि ऊपर वर्णित वर्गों के साथ तुलनीय नहीं है।
1983 से [[एडलमैन-पोमेरेंस-रूमली प्रधानता परीक्षण|एडलमैन-पोमेरेंस-रूमली प्रिमलिटी टेस्ट]] ने PRIMES को QP ([[अर्ध-बहुपद समय]]) में डाल दिया, जो कि ऊपर वर्णित वर्गों के साथ तुलनीय नहीं है।


अभ्यास में इसकी सुवाह्यता के कारण, बहुपद-समय एल्गोरिदम रीमैन परिकल्पना मानते हैं, और इसी तरह के अन्य सबूत, यह लंबे समय से संदिग्ध था लेकिन साबित नहीं हुआ कि बहुपद समय में प्राथमिकता को हल किया जा सकता है। एकेएस प्रीमैलिटी टेस्ट के अस्तित्व ने आखिरकार लंबे समय से चले आ रहे इस प्रश्न को सुलझा दिया और प्राइम्स को [[पी (जटिलता)]] में रखा। हालाँकि, PRIMES को P-पूर्ण नहीं माना जाता है, और यह ज्ञात नहीं है कि यह P के अंदर आने वाली कक्षाओं जैसे NC (जटिलता) या L (जटिलता) में निहित है या नहीं। यह ज्ञात है कि PRIMES AC0|AC में नहीं है<sup>0</उप>।<ref>E. Allender, M. Saks, and I.E. Shparlinski, A lower bound for primality, ''J. Comp. Syst. Sci.'' '''62''' (2001), pp. 356–366.</ref>
अभ्यास में इसकी सुवाह्यता के कारण, बहुपद-समय एल्गोरिदम रीमैन परिकल्पना मानते हैं, और इसी तरह के अन्य प्रमाण, यह लंबे समय से संदिग्ध था लेकिन सिद्ध नहीं हुआ कि बहुपद समय में प्रारंभिकता को हल किया जा सकता है। [[AKS प्रधानता परीक्षण|AKS प्रीमैलिटी टेस्ट]] के अस्तित्व ने आखिरकार इस लंबे समय से चले आ रहे सवाल को सुलझा दिया और PRIMES को [[पी (जटिलता)|P]] में रखा दिया। हालाँकि, PRIMES को [[P-पूर्ण]] नहीं माना जाता है, और यह ज्ञात नहीं है कि यह '''P''' के अंदर स्थित वर्गों जैसे [[NC]] या [[L]] में स्थित है या नहीं है। यह ज्ञात है कि PRIMES AC<sup>0</sup> में नहीं है|<sup>।<ref>E. Allender, M. Saks, and I.E. Shparlinski, A lower bound for primality, ''J. Comp. Syst. Sci.'' '''62''' (2001), pp. 356–366.</ref>




== संख्या-सैद्धांतिक तरीके ==
== संख्या-सैद्धांतिक विधियाँ ==
कोई संख्या अभाज्य है या नहीं, इसके परीक्षण के लिए कुछ संख्या-सैद्धांतिक विधियाँ मौजूद हैं, जैसे कि [[लुकास प्राइमलिटी टेस्ट]] और प्रोथ की प्रमेय | प्रोथ की परीक्षा। इन परीक्षणों में आम तौर पर n + 1, n - 1, या इसी तरह की मात्रा के गुणनखंडन की आवश्यकता होती है, जिसका अर्थ है कि वे सामान्य-उद्देश्य के प्रधानता परीक्षण के लिए उपयोगी नहीं हैं, लेकिन वे अक्सर काफी शक्तिशाली होते हैं जब परीक्षण संख्या n को एक विशेष के रूप में जाना जाता है प्रपत्र।
कोई संख्या अभाज्य है या नहीं, इसके परीक्षण के लिए कुछ संख्या-सैद्धांतिक विधियाँ उपस्थित हैं, जैसे कि [[लुकास प्राइमलिटी टेस्ट|लुकास परीक्षण]] और प्रोथ का [[लुकास प्राइमलिटी टेस्ट|परीक्षण]] उपस्थित है | इन परीक्षणों में आम तौर पर n + 1, n - 1, या इसी तरह की मात्रा के गुणनखंड की आवश्यकता होती है, जिसका अर्थ है कि वे सामान्य-उद्देश्य के प्रारंभिक परीक्षण के लिए उपयोगी नहीं हैं, लेकिन वे अक्सर काफी सशक्त होते हैं जब परीक्षण संख्या n को एक विशेष के रूप में जाना जाता है।


लुकास परीक्षण इस तथ्य पर निर्भर करता है कि एक संख्या का गुणात्मक क्रम n - 1 एक प्रधान n के लिए है जब एक आदिम रूट मॉड्यूलो n है। यदि हम दिखा सकते हैं कि a, n के लिए आदिम है, तो हम दिखा सकते हैं कि n अभाज्य है।
लुकास परीक्षण इस तथ्य पर निर्भर करता है कि एक संख्या का [[गुणात्मक क्रम]] n - 1 एक अभाज्य n के लिए है जब एक [[आदिम रूट के सापेक्ष (मॉड्यूलो)|प्रिमटिव रूट के सापेक्ष (मॉड्यूलो)]] n है। यदि हम दिखा सकते हैं कि ''a, n'' के लिए प्रिमटिव है, तो हम सकते दिखा सकते हैं कि n अभाज्य है।


== संदर्भ ==
== संदर्भ ==
Line 328: Line 323:
{{Number theoretic algorithms}}
{{Number theoretic algorithms}}


{{DEFAULTSORT:Primality Test}}[[Category: प्रारंभिक परीक्षण|*]] [[Category: असममित-कुंजी एल्गोरिदम]]
{{DEFAULTSORT:Primality Test}}
 
 


[[Category: Machine Translated Page]]
[[Category:All articles with specifically marked weasel-worded phrases|Primality Test]]
[[Category:Created On 11/05/2023]]
[[Category:Articles with specifically marked weasel-worded phrases from April 2010|Primality Test]]
[[Category:CS1|Primality Test]]
[[Category:Collapse templates|Primality Test]]
[[Category:Created On 11/05/2023|Primality Test]]
[[Category:Lua-based templates|Primality Test]]
[[Category:Machine Translated Page|Primality Test]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists|Primality Test]]
[[Category:Pages with script errors|Primality Test]]
[[Category:Sidebars with styles needing conversion|Primality Test]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Translated in Hindi|Primality Test]]
[[Category:Templates Vigyan Ready|Primality Test]]
[[Category:Templates generating microformats|Primality Test]]
[[Category:Templates that add a tracking category|Primality Test]]
[[Category:Templates that are not mobile friendly|Primality Test]]
[[Category:Templates that generate short descriptions|Primality Test]]
[[Category:Templates using TemplateData|Primality Test]]
[[Category:Webarchive template archiveis links|Primality Test]]
[[Category:Webarchive template other archives|Primality Test]]
[[Category:Wikipedia metatemplates|Primality Test]]
[[Category:असममित-कुंजी एल्गोरिदम|Primality Test]]
[[Category:प्रारंभिक परीक्षण|*]]

Latest revision as of 16:57, 25 May 2023

एक प्रारंभिक परीक्षण यह निर्धारित करने के लिए एक एल्गोरिदम है कि कोई इनपुट संख्या अभाज्य है या नहीं है। गणित के अन्य क्षेत्रों में इसका उपयोग क्रिप्टोग्राफी के लिए किया जाता है। पूर्णांक गुणनखंडन के विपरीत, प्रारंभिक परीक्षण आम तौर पर प्रमुख कारण नहीं देते हैं, केवल यह बताते हैं कि इनपुट संख्या अभाज्य है या नहीं है। गुणनखंडन को अभिकलनीय रूप से कठिन समस्या माना जाता है, जबकि प्रारंभिक परीक्षण तुलनात्मक रूप से आसान है (इनपुट के आकार में इसका चलने का समय बहुपद है)। कुछ प्रारंभिक परीक्षण सिद्ध करते हैं कि एक संख्या अभाज्य है, जबकि मिलर-राबिन जैसे अन्य यह सिद्ध करते हैं कि एक संख्या भाज्य है। इसलिए, बाद वाले को प्रारंभिक परीक्षणों के बजाय अधिक सटीक रूप से समग्रता परीक्षण कहा जा सकता है।

सरल तरीके

सबसे सरल प्रारंभिक परीक्षण ट्रायल विभाजन है: एक इनपुट संख्या दी गई है, n, जांचें कि क्या यह 2 और √n के बीच किसी भी अभाज्य संख्या से समान रूप से विभाज्य है (यानी कि विभाजन कोई शेष नहीं छोड़ता है)। यदि ऐसा है, तो n भाज्य है, नहीं तो अभाज्य है।[1] वास्तव में, किसी भी भाजक के लिए, एक और भाजक होना चाहिए, और इसलिए n से छोटे भाजक खोजना पर्याप्त है।

उदाहरण के लिए, संख्या 100 पर विचार करें, जो इन संख्याओं से समान रूप से विभाज्य है:

2, 4, 5, 10, 20, 25, 50

ध्यान दें कि सबसे बड़ा गुणक, 50, 100 का आधा है। यह सभी n के लिए सही है: सभी विभाजक n/2 से कम या उसके बराबर हैं।

जब n/2 तक के सभी संभावित विभाजकों का परीक्षण किया जाता है, तो कुछ गुणकदो बार खोजे जाएंगे। इसे देखने के लिए, विभाजकों की सूची को गुणनफलो की सूची के रूप में फिर से लिखें, प्रत्येक 100 के बराबर:

2 × 50, 4 × 25, 5 × 20, 10 × 10, 20 × 5, 25 × 4, 50 × 2

ध्यान दें कि 10 × 10 के बाद के गुणनफल केवल दोहराए गए नंबर हैं जो पहले के गुणनफलो, कम्यूटेड में दिखाई देते थे। उदाहरण के लिए, 5 × 20 और 20 × 5 के विपरीत क्रम में समान संख्याएँ हैं। यह सभी n के लिए सही है: n के सभी अद्वितीय विभाजक n से कम या उसके बराबर संख्याएँ हैं, इसलिए हमें उससे आगे की खोज करने की आवश्यकता नहीं है।[1] (इस उदाहरण में, n = 100 = 10) है |

2 से बड़ी सभी सम संख्याओं को भी हटाया जा सकता है: यदि एक सम संख्या n को विभाजित कर सकती है, तो 2 को भी कर सकती है।

एक उदाहरण 17 की प्रारंभिकता का परीक्षण करने के लिए ट्रायल विभाजन का उपयोग करना है। हमें केवल n तक के विभाजकों के लिए परीक्षण की आवश्यकता है, अर्थात पूर्णांक से कम या उसके बराबर , अर्थात् 2, 3,और 4 है| 4 को छोड़ दिया जा सकता है क्योंकि यह एक सम संख्या है: यदि 4 समान रूप से 17 को विभाजित कर सकता है, तो 2 भी होगा, और 2 पहले से ही सूची में है। वह 2 और 3 छोड़ देता है। इनमें से प्रत्येक संख्या के साथ 17 को विभाजित करें, और हम पाते हैं कि कोई भी 17 को समान रूप से विभाजित नहीं करता है - दोनों विभाजन शेष छोड़ते हैं। इसलिए, 17 अभाज्य है।

इस तरीके में और सुधार किया जा सकता है। ध्यान दें कि 3 से बड़ी सभी अभाज्य संख्याएँ 6k ± 1 के रूप की होती हैं, जहाँ k 0 से बड़ा कोई पूर्णांक है। ऐसा इसलिए है क्योंकि सभी पूर्णांकों को (6k + i) के रूप में व्यक्त किया जा सकता है, जहाँ i = -1, 0, 1, 2, 3, या 4 है। ध्यान दें कि 2 (6k + 0), (6k + 2), और (6k + 4) को विभाजित करता है और 3 (6k + 3) को विभाजित करता है। इसलिए, एक और भी सक्षम विधि यह जांचना है कि क्या n 2 या 3 से विभाज्य है, फिर के रूप की सभी संख्याओं की जांच करना है। यह n तक की सभी संख्याओं के परीक्षण से 3 गुना तेज है।

आगे सामान्यीकरण करते हुए, c# (c प्रिमोरियल) से बड़े सभी अभाज्य c# · k + i, i < c# के लिए, जहाँ c और k पूर्णांक हैं और i उन संख्याओं का प्रस्तुत करता है जो c# के लिए सहअभाज्य हैं। उदाहरण के लिए, मान लीजिए c = 6 है| तब c# = 2 · 3 · 5 = 30 है| सभी पूर्णांक 30k + i के रूप में हैं, i में i = 0, 1, 2,...,29 और k एक पूर्णांक है। हालाँकि, 2 0, 2, 4,..., 28 को विभाजित करता है; 3 0, 3, 6, ..., 27 को विभाजित करता है; और 5 0, 5, 10, ..., 25 को विभाजित करता है। अतः 30 से बड़ी सभी अभाज्य संख्याएँ i = 1, 7, 11, 13, 17, 19, 23, 29 के लिए 30k + i के रूप की होती हैं (अर्थात i < 30 के लिए जैसे कि gcd(i,30) = 1)। ध्यान दें कि यदि i और 30 सहअभाज्य नहीं थे, तो 30k + i 30 के अभाज्य भाजक, अर्थात् 2, 3, या 5 से विभाज्य होंगे, और इसलिए अभाज्य नहीं होते है। ऋणात्मक i के क्रम को पिछली विधि से सुमेल करने के लिए, प्रत्येक i को 1 से c#-1 तक जाँचने के बजाय (क्योंकि 0 और c# हमेशा सम होते हैं), प्रत्येक i को 1 से जाँचें c#/2, जो मानों i की सूची होगी जैसे कि सभी पूर्णांक c#k ± i के रूप के हैं। इस उदाहरण में, i = 1, 7, 11, 13 के लिए 30k ± i है। ध्यान दें कि इस सूची में हमेशा 1 और c से अधिक, लेकिन c#/2 से छोटे अभाज्यों का समुच्चय सम्मिलित होगा| उपर्युक्त शर्तों को पूरा करने वाली सभी संख्याएँ अभाज्य नहीं होती हैं। उदाहरण के लिए, 437 c= 7, c#=210, k=2, i=17 के लिए c#k + i के रूप में है। हालाँकि, 437 एक मिश्रित संख्या है जो 19*23 के बराबर है। इसीलिए दिए गए रूप (फॉर्म) की संख्याओं को अभी भी प्रारंभिकता के लिए परीक्षण की आवश्यकता है।

चूंकि c → ∞, c#k + i द्वारा एक निश्चित सीमा में ले जाने वाले मानों की संख्या कम हो जाती है, और इसलिए n का परीक्षण करने का समय कम हो जाता है। इस विधि के लिए, c से कम सभी अभाज्यों द्वारा विभाज्यता की जांच करना भी आवश्यक है। एराटोस्थनीज की सीव देते हुए, पूर्ववर्ती के अनुरूप टिप्पणियों को पुनरावर्ती रूप से लागू किया जा सकता है।

इन तरीकों को गति देने की एक तरीका, (और नीचे उल्लिखित सभी अन्य) एक निश्चित सीमा तक सभी अभाज्यों की सूची को पूर्व-गणना और स्टोर करना है, जैसे कि 200 तक सभी अभाज्य हैं । (ऐसी सूची की गणना एराटोस्थनीज की सीव या एक एल्गोरिथ्म द्वारा की जा सकती है जो सभी ज्ञात अभाज्य < √m के विरुद्ध प्रत्येक वृद्धिशील m का परीक्षण करते है)। फिर, एक महत्वपूर्ण विधि के साथ प्रारंभिकता के लिए n का परीक्षण करने से पहले, n को पहले सूची से किसी भी अभाज्य द्वारा विभाज्यता के लिए जाँचा जा सकता है। यदि यह इनमें से किसी भी संख्या से विभाज्य है तो यह भाज्य है, और आगे के परीक्षणों को छोड़ दिया जा सकता है।

एक सरल लेकिन बहुत ही अक्षम प्रारंभिक परीक्षण विल्सन के प्रमेय का उपयोग करता है, जिसमें कहा गया है कि p प्रमुख है अगर और केवल अगर:

यद्यपि इस पद्धति के लिए लगभग p मॉड्यूलर गुणन की आवश्यकता होती है, इसे अप्रयोगात्मक बनाने के लिए, अभाज्यों और मॉड्यूलर अवशेषों के बारे में प्रमेय कई और प्रयोगात्मक तरीकों का आधार बनाते हैं।

उदाहरण कोड

पायथन

निम्नलिखित पहले उल्लेखित सरल 6k ± 1 इष्टतमीकरण का उपयोग करते हुए पायथन में एक सरल प्रारंभिक परीक्षण है। नीचे वर्णित अधिक परिष्कृत विधियाँ बड़े n के लिए बहुत तेज़ हैं।

 from math import isqrt
def is_prime(n: int) -> bool:
    if n <= 3:
        return n > 1
    if n % 2 == 0 or n % 3 == 0:
        return False
    limit = isqrt(n)
    for i in range(5, limit+1, 6):
        if n % i == 0 or n % (i+2) == 0:
            return False
    return True

सी, सी++, सी# & डी 
उपरोक्त के समान इष्टतमीकरण का उपयोग करते हुए निम्नलिखित भाषाओं के C परिवार में एक प्रारंभिक परीक्षण है

bool IsPrime(int n)
{
    if (n == 2 || n == 3)
        return true;

    if (n <= 1 || n % 2 == 0 || n % 3 == 0)
        return false;

    for (int i = 5; i * i <= n; i += 6)
    {
        if (n % i == 0 || n % (i + 2) == 0)
            return false;
    }

    return true;
}

जावा
उपरोक्त के समान इष्टतमीकरण का उपयोग करते हुए निम्नलिखित जावा में एक प्रारंभिक परीक्षण है


import java.util.*;

public static boolean isPrime(int n){
    
    if (n <= 1)
        return false;
        
    if (n == 2 || n == 3)
        return true;
        
    if (n % 2 == 0 || n % 3 == 0)
        return false;
    
    for (int i = 5; i <= Math.sqrt(n); i = i + 6)
        if (n % i == 0 || n % (i + 2) == 0)
            return false;

    return true;
    }

जावास्क्रिप्ट

उपरोक्त के समान इष्टतमीकरण का उपयोग करते हुए निम्नलिखित जावास्क्रिप्ट में एक प्रारंभिक परीक्षण है।

function isPrime(num) {
  if (num == 2 || num == 3)
    return true;
  if (num <= 1 || num % 2 == 0 || num % 3 == 0)
    return false;  
  for (let i = 5; i * i <= num ; i+=6)
    if (num % i == 0 || num % (i + 2) == 0)
      return false;
  return true;
}

आर

उपरोक्त के समान इष्टतमीकरण का उपयोग करते हुए निम्नलिखित आर (प्रोग्रामिंग भाषा) में एक प्रारंभिक परीक्षण है।

is.prime <- function(number) {
  if (number <= 1) {
    return (FALSE)
  } else if (number <= 3) {
    return (TRUE)
  }

  if (number %% 2 == 0 || number %% 3 == 0) {
    return (FALSE)
  }

  i <- 5
  while (i*i <= number) {
    if (number %% i == 0 || number %% (i+2) == 0) {
      return (FALSE)
    }
    i = i + 6
  }
  return (TRUE)
}

डार्ट

नीचे डार्ट (प्रोग्रामिंग भाषा) में उपरोक्त के समान इष्टतमीकरण का उपयोग करते हुए एक प्रारंभिक परीक्षण है।

checkIfPrimeNumber(number) {
  if (number == 2 || number == 3) {
    return 'true';
  } else if (number <= 1 || number % 2 == 0 || number % 3 == 0) {
    return 'false';
  }
  for (int i = 5; i * i <= number; i += 6) {
    if (number % i == 0 || number % (i + 2) == 0) {
      return 'false';
    }
  }
  return 'true';
}

फ़्री पास्कल

उपरोक्त के समान इष्टतमीकरण का उपयोग करते हुए फ़्री पास्कल में निम्नलिखित एक प्रारंभिक परीक्षण है।

function IsPrime(N:Integer):Boolean;
var
   I:Integer;
begin
   if ((N = 2) or (N = 3)) then Exit(True);
   if ((N <= 1) or (N mod 2 = 0) or (N mod 3 = 0)) then Exit(False);
   I := 5;
   while (I * I <= N) do
   begin
      if ((N mod I = 0) or (N mod (I+2) = 0)) then Exit(False);
      Inc(I, 6);
   end;
   Exit(True);
end;


गो

उपरोक्त के समान इष्टतमीकरण का उपयोग करते हुए गोलंग में निम्नलिखित एक प्रारंभिक परीक्षण है।

func IsPrime(num int) bool {
	if num > 1 && num <= 3 {
		return true
	}
	if num <= 1 || num%2 == 0 || num%3 == 0 {
		return false
	}

	for i := 5; i*i <= num; i += 6 {
		if num%i == 0 || num%(i+2) == 0 {
			return false
		}
	}
	return true
}


अनुमानी परीक्षण

ये ऐसे परीक्षण हैं जो अभ्यास में अच्छा काम करते प्रतीत होते हैं, लेकिन अप्रमाणित हैं और इसलिए, तकनीकी रूप से अनुरूप (स्पीकिंग), एल्गोरिदम बिल्कुल भी नहीं हैं। फर्मेट परीक्षण और फिबोनाशी परीक्षण सरल उदाहरण हैं, और संयुक्त होने पर वे बहुत प्रभावी होते हैं। जॉन सेल्फ्रिज ने अनुमान लगाया है कि यदि p एक विषम संख्या है, और p ≡ ±2 (mod 5), तो p अभाज्य होगा यदि निम्नलिखित में से दोनों हैं:

  • 2p−1 ≡ 1 (mod p),
  • fp+1 ≡ 0 (mod p),

जहां fk k-वें फिबोनैकी संख्या है। पहली शर्त आधार 2 का उपयोग करते हुए फ़र्मेट प्रारंभिक परीक्षण है।

सामान्य तौर पर, यदि p ≡ a (mod x2+4), जहां एक द्विघात गैर-अवशेष (mod x2+4) है तो p को अभाज्य होना चाहिए यदि निम्न स्थितियाँ हों:

  • 2p−1 ≡ 1 (mod p),
  • f(1)p+1 ≡ 0 (mod p),

f(x)k x पर k-वां फिबोनैकी बहुपद है।

सेल्फ्रिज, कार्ल पोमेरेन्स और सैमुअल वैगस्टाफ मिलकर एक गणित्र उदाहरण के लिए $620 की उपस्थिति करते हैं। समस्या अभी भी 11 सितंबर, 2015 तक खुली है।[2]

संभाव्य परीक्षण

संभाव्य परीक्षण अनुमानों की तुलना में अधिक सख्त होते हैं, जिसमें वे एक भाज्य संख्या द्वारा फूलेड बनाए जाने की संभावना पर सिद्ध सीमाएं प्रदान करते हैं। कई प्रमुख प्रारंभिक परीक्षण संभाव्य परीक्षण हैं। ये परीक्षण परीक्षण संख्या n के अलावा, कुछ अन्य संख्याओं का उपयोग करते हैं जिन्हें कुछ प्रतिदर्श समष्टि से यादृच्छिक रूप से चुना जाता है; सामान्य यादृच्छिक प्रारंभिक परीक्षण कभी भी अभाज्य संख्या को भाज्य के रूप में विवरण नहीं करते हैं, लेकिन यह संभव है कि भाज्य संख्या को अभाज्य के रूप में विवरण करते हैं। a के कई स्वतंत्र रूप से चुने गए मानों के साथ परीक्षण को दोहराकर त्रुटि की संभावना को कम किया जा सकता है; दो सामान्य रूप से उपयोग किए जाने वाले परीक्षणों के लिए, किसी भी भाज्य n के लिए कम से कम आधे n की समग्रता का पता लगाता है, इसलिए k दोहराव त्रुटि संभावना को अधिकतम 2k तक कम कर देता है, जिसे k को बढ़ाकर स्वेच्छतः से छोटा किया जा सकता है।

यादृच्छिक प्रारंभिक परीक्षणों की मूल संरचना इस प्रकार है:

  1. यादृच्छिकता से (रैन्डम्ली) एक संख्या चुनें।
  2. a और दी गई संख्या n को सम्मिलित करते हुए समिका (चयनित परीक्षण के संगत) की जाँच करें। यदि समिका सही सिद्ध नहीं होती है, तो n एक संयुक्त (भाज्य) संख्या है और a संयुक्तता का प्रमाण है, और परीक्षण बंद हो जाता है।
  3. आवश्यक सटीकता तक पहुंचने तक पहले चरण पर वापस जाएं।

एक या अधिक पुनरावृत्तियों के बाद, यदि n एक भाज्य संख्या नहीं पाई जाती है, तो इसे संभवतः अभाज्य घोषित किया जा सकता है।

फर्मेट प्रारंभिक परीक्षण

सबसे सरल संभाव्य परीक्षण फ़र्मेट प्रारंभिक परीक्षण (वास्तव में एक समग्रता परीक्षण) है। यह निम्नानुसार काम करता है:

एक पूर्णांक n दिया गया है, n के लिए कुछ पूर्णांक a सहअभाज्य चुनें और एक -1 के सापेक्ष n की गणना करें। यदि परिणाम 1 से भिन्न है, तो n भाज्य है। यदि यह 1 है, तो n अभाज्य हो सकता है।

यदि an−1 (सापेक्ष n) 1 है लेकिन n अभाज्य नहीं है, तो n को आधार a के लिए स्यूडोप्राइम कहा जाता है। अभ्यास में, हम देखते हैं कि, यदि an−1 (सापेक्ष n) 1 है, तो n आमतौर पर अभाज्य है। लेकिन यहाँ एक गणित्र उदाहरण है: यदि n = 341 और a = 2, तो

भले ही 341 = 11·31 भाज्य है। वास्तव में, 341 का सबसे छोटा स्यूडोप्राइम आधार 2 है (चित्र 1 देखें [3]).

केवल 21853 का स्यूडोप्राइम्स आधार 2 है जो 2.5×1010 हैं | (पृष्ठ 1005 देखें [3]) इसका अर्थ है कि, 2.5×1010 तक n के लिए, यदि 2n−1 (सापेक्ष n) 1 के बराबर है, तो n अभाज्य है, जब तक कि n इन 21853 स्यूडोप्राइम्स में से एक न हो जाये।

कुछ भाज्य संख्याओं (कारमाइकल संख्याएँ) में यह गुण होता है कि an − 1 प्रत्येक a के लिए 1 (सापेक्ष n) होता है जो n के लिए सहअभाज्य है। सबसे छोटा उदाहरण n = 561 = 3·11·17 है, जिसके लिए a560 1 (सापेक्ष 561) है, जो 561 के सभी सहअभाज्य के लिए है। फिर भी, फ़र्मेट परीक्षण का उपयोग अक्सर तब किया जाता है जब संख्याओं की एक रैपिड स्क्रीनिंग की आवश्यकता होती है | उदाहरण के लिए आरएसए सार्वजनिक समाधान गूढ़लेखिकी (क्रिप्टोग्राफ़िक) एल्गोरिथम के प्रमुख निर्माण चरण में।

मिलर-राबिन और सोलोवे-स्ट्रैसन प्रारंभिक परीक्षण

मिलर-राबिन प्रारंभिक परीक्षण और सोलोवे-स्ट्रैसन प्रारंभिक परीक्षण अधिक परिष्कृत वेरिएंट हैं, जो सभी भाज्यों का पता लगाते हैं (एक बार फिर, इसका अर्थ है: प्रत्येक भाज्य संख्या n के लिए, कम से कम 3/4 (मिलर-राबिन) या 1/2 (सोलोवे-स्ट्रैसन) संख्याएं n की समग्रता के प्रमाण हैं)। ये समग्रता परीक्षण भी हैं।

मिलर-राबिन प्रारंभिक परीक्षण निम्नानुसार काम करता है: एक पूर्णांक n दिया गया है, कुछ धनात्मक पूर्णांक a < n चुनें। माना 2sd = n − 1, जहां d विषम है। यदि

और

सभी के लिए

तब n भाज्य होता है और a समग्रता का प्रमाण होता है। अन्यथा, n अभाज्य हो भी सकता है और नहीं भी सकता है । मिलर-राबिन परीक्षण एक महत्वपूर्ण संभाव्य परीक्षण है| (देखें PSW[3]पृष्ठ 1004)

सोलोवे-स्ट्रैसन प्रारंभिक परीक्षण एक और समता का उपयोग करता है: एक विषम संख्या n को देखते हुए, कुछ पूर्णांक a < n चुनें, यदि

, कहाँ जैकोबी प्रतीक है,

तब n भाज्य होता है और a समग्रता का प्रमाण होता है। अन्यथा, n अभाज्य हो भी सकता है और नहीं भी सकता है । सोलोवे-स्ट्रैसन परीक्षण एक यूलर संभाव्य परीक्षण है| (देखें PSW[3]पृष्ठ 1003)

a के प्रत्येक विशेष मान के लिए, सोलोवे-स्ट्रैसन परीक्षण मिलर-राबिन परीक्षण से खराब है। उदाहरण के लिए, यदि n = 1905 और a = 2 है, तो मिलर-राबिन परीक्षण से पता चलता है कि n भाज्य है, लेकिन सोलोवे-स्ट्रैसन परीक्षण नहीं है। ऐसा इसलिए है क्योंकि 1905 एक यूलर स्यूडोप्राइम आधार 2 नहीं है(यह PSW के चित्र 1 में दिखाया गया है[3]) |

फ्रोबेनियस प्रारंभिक परीक्षण

मिलर-राबिन और सोलोवे-स्ट्रैसन प्रारंभिक परीक्षण सरल हैं और अन्य सामान्य प्रारंभिक परीक्षणों की तुलना में बहुत तेज़ हैं। कुछ स्थितियों में, दक्षता में और सुधार करने का एक तरीका फ्रोबेनियस स्यूडोप्रिमेलिटी परीक्षण है; इस परीक्षण के एक चक्कर में मिलर-राबिन के एक चक्कर की तुलना में लगभग तीन गुना अधिक समय लगता है, लेकिन मिलर-राबिन के सात चक्करों की तुलना में एक संभाव्यता सीमा प्राप्त होती है।

फ्रोबेनियस परीक्षण लुकास संभाव्य प्रधान परीक्षण का एक सामान्यीकरण है।

बैली-पीएसडब्ल्यू प्रारंभिक परीक्षण

बैली-पीएसडब्लू प्रारंभिक परीक्षण एक संभाव्य परीक्षण है जो एक फ़र्मेट या मिलर-राबिन परीक्षण को लुकास संभाव्य प्रधान परीक्षण के साथ जोड़ता है ताकि एक ऐसा प्रारंभिक परीक्षण प्राप्त किया जा सके जिसमें कोई ज्ञात गणित्र उदाहरण नहीं है। अर्थात्, कोई ज्ञात भाज्य n नहीं है जिसके लिए यह परीक्षण रिपोर्ट करता है कि n संभवतः अभाज्य है।[4][5] यह दिखाया गया है कि n के लिए कोई गणित्र उदाहरण नहीं है|

अन्य परीक्षण

लियोनार्ड एडलमैन और मिंग-देह हुआंग ने दीर्घवृत्तीय वक्र प्रारंभिक परीक्षण का एक त्रुटिहीन (लेकिन अपेक्षित बहुपद-समय) भिन्नरूप प्रस्तुत किया है। अन्य संभाव्य परीक्षणों के विपरीत, यह एल्गोरिथम एक प्रारंभिक प्रमाण पत्र का निर्माण करता है, और इस प्रकार यह सिद्ध करने के लिए उपयोग किया जा सकता है कि एक संख्या अभाज्य है।[6] अभ्यास में एल्गोरिथ्म निषेधात्मक रूप से मध्यम है।

यदि क्वांटम कंप्यूटर उपलब्ध थे, तो शास्त्रीय कंप्यूटरों की तुलना में प्रारंभिक का परीक्षण उपगामी रूप से तेजी से किया जा सकता था। पॉकलिंगटन प्रारंभिक परीक्षण के साथ शोर के एल्गोरिदम का एक संयोजन, एक पूर्णांक गुणनखंडन विधि समस्या को हल कर सकती है |[7]


तेज नियतात्मक परीक्षण

20 वीं शताब्दी की शुरुआत के करीब, यह दिखाया गया था कि फर्मेट के छोटे प्रमेय का एक परिणाम प्रारंभिकता के परीक्षण के लिए उपयोग किया जा सकता है।[8] इसका परिणाम पॉकलिंगटन प्रारंभिक परीक्षण में हुआ है।[9] हालाँकि, इस परीक्षण के लिए n − 1 के आंशिक गुणन की आवश्यकता होती है, सबसे खराब स्थिति में चलने का समय अभी भी काफी धीमा था। सरल विधियों की तुलना में पहला नियतात्मक प्रारंभिक परीक्षण साइक्लोटॉमी परीक्षण था; इसका रनटाइम O((log n)c log log log n) सिद्ध हो सकता है, जहां n प्रारंभिकता के लिए परीक्षण की जाने वाली संख्या है और c, n से स्वतंत्र है। और भी कई सुधार किए गए, लेकिन कोई भी बहुपद रनिंग टाइम सिद्ध नहीं हो सका। (ध्यान दें कि चलने का समय इनपुट के आकार के संदर्भ में मापा जाता है, जो इस स्थिति में ~ log n है, जो संख्या n का निरूपण करने के लिए आवश्यक बिट्स की संख्या है।) यदि विश्लेषणात्मक संख्या सिद्धांत पर कुछ अनुमानित कथन सही हैं, तो दीर्घवृत्तीय वक्र प्रारंभिक परीक्षण O((log n)6) में चलने के लिए सिद्ध किया जा सकता है।[which?] इसी तरह, सामान्यीकृत रीमैन परिकल्पना के तहत, नियतात्मक मिलर-राबिन का परीक्षण, जो संभाव्य मिलर-राबिन परीक्षण का आधार बनाता है, को Õ((log n)4) में रन के लिए सिद्ध किया जा सकता है|[10] अभ्यास में, यह एल्गोरिथम संख्याओं के आकार के लिए अन्य दो की तुलना में मध्यम है, जिनको बिल्कुल भी पार किया जा सकता है। क्योंकि इन दो विधियों का कार्यान्वयन कठिन है और प्रोग्रामन त्रुटियों का संकट उत्पन्न करता है, निष्क्रिय लेकिन सरल परीक्षणों को अक्सर प्राथमिकता दी जाती है।

2002 में, मनिंद्र अग्रवाल, नीरज कयाल और नितिन सक्सेना द्वारा पहली सिद्ध बिना शर्त नियतात्मक बहुपद समय परीक्षण का आविष्कार किया गया था। AKS प्रारंभिक परीक्षण Õ((log n)12) में रन है [11] (उनके पेपर के प्रकाशित संशोधन में Õ((log n)7.5) में सुधार हुआ है),जिसे आगे Õ((log n)6) तक घटाया जा सकता है ) यदि सोफी जर्मेन अनुमान सत्य है।[12] इसके बाद में, लेनस्ट्रा और पोमेरेन्स ने परीक्षण का एक संस्करण प्रस्तुत किया जो बिना शर्त Õ((log n)6) समय में चलता है।[13]

अग्रवाल, कयाल और सक्सेना अपने एल्गोरिदम का एक प्रकार प्रस्तावित करते हैं अग्रवाल का अनुमानित कथन सत्य होने पर Õ((log n)3) में चलेगा; हालाँकि, हेंड्रिक लेनस्ट्रा और कार्ल पोमेरेन्स द्वारा एक अनुमानी तर्क से पता चलता है कि यह शायद गलत है।[11]अग्रवाल के अनुमानित कथन का एक संशोधित संस्करण, अग्रवाल-पोपोविक अनुमान,[14] अभी भी सच हो सकता है।

जटिलता

कम्प्यूटेशनल जटिलता सिद्धांत में, अभाज्य संख्याओं के अनुरूप औपचारिक भाषा को PRIMES के रूप में दर्शाया जाता है। यह दिखाना आसान है कि PRIMES Co-NP में है: इसका पूरक सम्मिश्र NP में है क्योंकि एक गुणक का गैर-निर्धारणात्मक रूप से अनुमान लगाकर सम्मिश्रता का निर्णय लिया जा सकता है।

1975 में, वॉन प्रैट ने दिखाया कि बहुपद समय में जांचने योग्य प्रारंभिकता के लिए एक प्रमाण पत्र उपस्थित था, और इस प्रकार PRIMES NP और में था | विवरण के लिए प्रारंभिक प्रमाण पत्र देखें।

सोलोवे-स्ट्रैसन और मिलर-राबिन एल्गोरिदम की बाद की खोज ने PRIMES को coRP में डाल दिया। 1992 में, एडलमैन-हुआंग एल्गोरिथम ने [6]जटिलता को घटाकर कर दिया, जिसने प्रैट के परिणाम का स्थान ले लिया है।

1983 से एडलमैन-पोमेरेंस-रूमली प्रिमलिटी टेस्ट ने PRIMES को QP (अर्ध-बहुपद समय) में डाल दिया, जो कि ऊपर वर्णित वर्गों के साथ तुलनीय नहीं है।

अभ्यास में इसकी सुवाह्यता के कारण, बहुपद-समय एल्गोरिदम रीमैन परिकल्पना मानते हैं, और इसी तरह के अन्य प्रमाण, यह लंबे समय से संदिग्ध था लेकिन सिद्ध नहीं हुआ कि बहुपद समय में प्रारंभिकता को हल किया जा सकता है। AKS प्रीमैलिटी टेस्ट के अस्तित्व ने आखिरकार इस लंबे समय से चले आ रहे सवाल को सुलझा दिया और PRIMES को P में रखा दिया। हालाँकि, PRIMES को P-पूर्ण नहीं माना जाता है, और यह ज्ञात नहीं है कि यह P के अंदर स्थित वर्गों जैसे NC या L में स्थित है या नहीं है। यह ज्ञात है कि PRIMES AC0 में नहीं है|[15]


संख्या-सैद्धांतिक विधियाँ

कोई संख्या अभाज्य है या नहीं, इसके परीक्षण के लिए कुछ संख्या-सैद्धांतिक विधियाँ उपस्थित हैं, जैसे कि लुकास परीक्षण और प्रोथ का परीक्षण उपस्थित है | इन परीक्षणों में आम तौर पर n + 1, n - 1, या इसी तरह की मात्रा के गुणनखंड की आवश्यकता होती है, जिसका अर्थ है कि वे सामान्य-उद्देश्य के प्रारंभिक परीक्षण के लिए उपयोगी नहीं हैं, लेकिन वे अक्सर काफी सशक्त होते हैं जब परीक्षण संख्या n को एक विशेष के रूप में जाना जाता है।

लुकास परीक्षण इस तथ्य पर निर्भर करता है कि एक संख्या का गुणात्मक क्रम n - 1 एक अभाज्य n के लिए है जब एक प्रिमटिव रूट के सापेक्ष (मॉड्यूलो) n है। यदि हम दिखा सकते हैं कि a, n के लिए प्रिमटिव है, तो हम सकते दिखा सकते हैं कि n अभाज्य है।

संदर्भ

  1. 1.0 1.1 Riesel (1994) pp.2-3
  2. John Selfridge#Selfridge's conjecture about primality testing.
  3. 3.0 3.1 3.2 3.3 3.4 Carl Pomerance; John L. Selfridge; Samuel S. Wagstaff, Jr. (July 1980). "The pseudoprimes to 25·109" (PDF). Mathematics of Computation. 35 (151): 1003–1026. doi:10.1090/S0025-5718-1980-0572872-7.
  4. Robert Baillie; Samuel S. Wagstaff, Jr. (October 1980). "लुकास स्यूडोप्राइम्स" (PDF). Mathematics of Computation. 35 (152): 1391–1417. doi:10.1090/S0025-5718-1980-0583518-6. MR 0583518.
  5. Robert Baillie; Andrew Fiori; Samuel S. Wagstaff, Jr. (July 2021). "बैली-पीएसडब्ल्यू प्राइमलिटी टेस्ट को मजबूत बनाना". Mathematics of Computation. 90 (330): 1931–1955. arXiv:2006.14425. doi:10.1090/mcom/3616. S2CID 220055722.
  6. 6.0 6.1 Adleman, Leonard M.; Huang, Ming-Deh (1992). परिमित क्षेत्र में प्राइमलिटी परीक्षण और एबेलियन किस्में. Lecture notes in mathematics. Vol. 1512. Springer-Verlag. ISBN 3-540-55308-8.
  7. Chau, H. F.; Lo, H.-K. (1995). "क्वांटम फैक्टराइजेशन के माध्यम से प्राइमलिटी टेस्ट". arXiv:quant-ph/9508005.
  8. Pocklington, H. C. (1914). "फर्मेट के प्रमेय द्वारा बड़ी संख्या की प्रधान या समग्र प्रकृति का निर्धारण". Cambr. Phil. Soc. Proc. 18: 29–30. JFM 45.1250.02.
  9. Weisstein, Eric W. "Pocklington's Theorem". MathWorld.
  10. Gary L. Miller (1976). "रीमैन की परिकल्पना और प्रारंभिकता के लिए परीक्षण". Journal of Computer and System Sciences. 13 (3): 300–317. doi:10.1016/S0022-0000(76)80043-8.
  11. 11.0 11.1 Agrawal, Manindra; Kayal, Neeraj; Saxena, Nitin (2004). "प्राइम्स पी में है" (PDF). Annals of Mathematics. 160 (2): 781–793. doi:10.4007/annals.2004.160.781.
  12. Agrawal, Manindra; Kayal, Neeraj; Saxena, Nitin (2004). "PRIMES, P में है" (PDF). Annals of Mathematics. 160 (2): 781–793. doi:10.4007/annals.2004.160.781.
  13. Carl Pomerance & Hendrik W. Lenstra (July 20, 2005). "Primality testing with Gaussian periods" (PDF).
  14. Popovych, Roman (December 30, 2008). "अग्रवाल अनुमान पर एक नोट" (PDF).
  15. E. Allender, M. Saks, and I.E. Shparlinski, A lower bound for primality, J. Comp. Syst. Sci. 62 (2001), pp. 356–366.


स्रोत

बाहरी संबंध