एराटोस्थनीज की छलनी

गणित में, एराटोस्थनीज की छलनी किसी भी सीमा तक सभी अभाज्य संख्याओं की शोध के लिए प्राचीन कलन विधि है।

यह पुनरावृत्त रूप से समग्र संख्या (अर्थात, अभाज्य नहीं) के रूप में चिह्नित करता है, प्रत्येक अभाज्य संख्या के गुणकों को, प्रथम अभाज्य संख्या 2 के साथ प्रारम्भ करता है। किसी दिए गए अभाज्य के गुणकों को अंकगणित के साथ उस अभाज्य से प्रारम्भ होने वाली संख्याओं के अनुक्रम के रूप में उत्पन्न किया जाता है उनके मध्य निरंतर भिन्नता होती है जो उस अभाज्य के समान है। प्रत्येक अभाज्य द्वारा विभाज्यता के लिए प्रत्येक उम्मीदवार संख्या का क्रमिक रूप से परीक्षण करने के लिए परीक्षण प्रभाग का उपयोग करने के लिए छलनी महत्वपूर्ण है। प्रत्येक अनुशोधित अभाज्य संख्याओं के सभी गुणकों को कंपोजिट के रूप में चिह्नित किया गया है, शेष अचिह्नित संख्याएं अभाज्य संख्याएं हैं।

छलनी का सबसे प्रथम ज्ञात संदर्भ (कोस्किनॉन एराटोस्थेनस) अंकगणित के निकोमाचस के परिचय में, प्रारंभिक 2 समुच्चय है। सीई पुस्तक जो इसका श्रेय एराटोस्थनीज को देती है, जो कि तीसरा प्रतिशत है। ईसा पूर्व ग्रीक गणितज्ञ, चूँकि अभाज्य संख्याओं के अतिरिक्त विषम संख्याओं द्वारा छलनी का वर्णन करता है।

कई अभाज्य संख्याओं में से, यह सभी छोटे अभाज्यों को शोध के सबसे कुशल उपाय है। इसका उपयोग अंकगणितीय प्रगति में अभाज्य संख्या की अनुशोधन के लिए किया जा सकता है।

अवलोकन
अभाज्य संख्या प्राकृतिक संख्या है जिसमें दो भिन्न-भिन्न प्राकृतिक संख्या विभाजक होते हैं: संख्या 1 और स्वयं है।

एराटोस्थनीज विधि द्वारा दिए गए पूर्णांक $n$ से कम या उसके समान सभी अभाज्य संख्याएँ ज्ञात करना:


 * 1) 2 से $n$ निरन्तर पूर्णांकों की सूची बनाएं : $(2, 3, 4, ..., n)$ बनाएं।
 * 2) प्रारम्भ में, $p$ समान 2, सबसे छोटी अभाज्य संख्या है।
 * 3) $2p$ से $n$ तक $p$ की वृद्धि में गिनती करके $p$ के गुणकों की गणना करें, और उन्हें सूची में चिह्नित करें (ये होंगे $2p, 3p, 4p, ...$; $p$ स्वयं को चिह्नित नहीं किया जाना चाहिए)।
 * 4) सूची में सबसे छोटी संख्या ज्ञात कीजिए जो $p$ से बड़ी नहीं है। यदि ऐसी कोई संख्या नहीं थी, तो रुकें। $p$ को अब इस नई संख्या (जो अगला अभाज्य है) के समान करें और चरण 3 से दोहराएं।
 * 5) जब एल्गोरिथम समाप्त हो जाता है, तो सूची में अंकित नहीं की गई शेष संख्याएँ n के नीचे सभी अभाज्य संख्याएँ होती हैं।

यहाँ मुख्य विचार यह है कि p को दिया गया प्रत्येक मान अभाज्य होगा, क्योंकि यदि यह सम्मिश्र होता तो इसे किसी अन्य, छोटे अभाज्य के गुणक के रूप में चिह्नित किया जाता। ध्यान दें कि कुछ संख्याओं को एक से अधिक बार चिह्नित किया जा सकता है (उदाहरण के लिए, 15 को 3 और 5 दोनों के लिए चिह्नित किया जाएगा)।

परिशोधन के रूप में, $p^{2}$ से प्रारंभ करते हुए चरण 3 में संख्याओं को चिह्नित करना पर्याप्त है, क्योंकि $p$ के सभी छोटे गुणकों को उस बिंदु पर पहले ही चिह्नित किया जा चुका होगा। इसका अर्थ है कि एल्गोरिथम को चरण 4 में समाप्त करने की अनुमति है जब $p^{2}$ से $n$ अधिक है।

परिशोधन प्रारम्भ में केवल विषम संख्याओं को सूचीबद्ध करना है, $(3, 5, ..., n)$, और चरण 3 में $2p$ की वृद्धि में गणना करें, इस प्रकार $p$ के केवल विषम गुणकों को चिह्नित करें। यह वास्तव में मूल एल्गोरिथ्म में दिखाई देता है। इसे व्हील गुणन के साथ सामान्यीकृत किया जा सकता है, प्रारंभिक सूची को केवल पहले कुछ अभाज्य संख्याओं से बनाया जाता है, न कि केवल विषमताओं से (अर्थात, संख्या 2 के साथ सह-अभाज्य), और इसी प्रकार समायोजित वृद्धि में गिनती की जाती है जिससे $p$ के केवल ऐसे गुणक हों पहले स्थान पर उन छोटे अभाज्यों के साथ सह-अभाज्य उत्पन्न होते हैं।

उदाहरण
30 से कम या 30 के समान सभी अभाज्य संख्याएँ ज्ञात करने के लिए, निम्नानुसार आगे बढ़ें।

सबसे प्रथम, 2 से 30 तक पूर्णांकों की सूची तैयार करें:

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

सूची में प्रथम नंबर 2 है; 2 की वृद्धि में 2 से गिनकर 2 के पश्चात सूची में प्रत्येक दूसरी संख्या से आगे जाएं (ये सूची में 2 के सभी गुणक होंगे):

2 3 5  7  9  11  13  15  17  19  21  23  25  27  29

सूची में 2 के पश्चात निकटतम संख्या 3 है; 3 की वृद्धि में 3 से गिनती करके 3 के पश्चात सूची में प्रत्येक तीसरे नंबर से आगे जाएं (ये सूची में 3 के सभी गुणक होंगे):

2 3 5  7  11  13  17  19  23  25  29

सूची में 3 के पश्चात जो निकटतम संख्या अभी तक नहीं निकली है वह 5 है; 5 की वृद्धि में 5 से गिनकर 5 के पश्चात सूची में प्रत्येक 5वीं संख्या से आगे जाएं (अर्थात 5 के सभी गुणक):

2 3 5  7  11  13  17  19  23  29

5 के पश्चात सूची में निकटतम संख्या 7 है जिसे अभी तक नहीं विभक्त किया गया है; निकटतम चरण 7 के पश्चात सूची में प्रत्येक 7वीं संख्या से आगे जाएं, परन्तु वे सभी इस बिंदु पर प्रथम ही पूर्व ही आगे जा चुके है, क्योंकि ये संख्याएं (14, 21, 28) भी छोटी अभाज्य संख्याओं के गुणक हैं क्योंकि 7 × 7 बड़ा एवं 30 से अधिक है। सूची में इस बिंदु पर जिन संख्याओं को नहीं विभक्त किया गया है, वे सभी 30 से नीचे की अभाज्य संख्याएँ हैं:

2 3 5 7 11 13 17 19 23 29

स्यूडोकोड
एराटोस्थनीज की छलनी को स्यूडोकोड में व्यक्त किया जा सकता है, एराटोस्थनीज की छलनी एल्गोरिथम इस प्रकार है: algorithm Sieve of Eratosthenes is

input: an integer n > 1.

output: all prime numbers from 2 through n. let A be an array of Boolean values, indexed by integers 2 to n,

initially all set to true. for i = 2, 3, 4, ..., not exceeding √n do if A[i] is true for j = i2, i2+i, i2+2i, i2+3i, ..., not exceeding n do set A[j] := false return all i such that A[i] is true. यह एल्गोरिद्म $n$ से अधिक नहीं सभी अभाज्य संख्याएँ उत्पन्न करता है। इसमें सामान्य अनुकूलन सम्मिलित है, जो $i^{2}$ से प्रत्येक अभाज्य $i$ के गुणकों की गणना करना प्रारंभ करना है। इस एल्गोरिथम की समय जटिलता $O(n log log n)$ है, परन्तु सरणी अद्यतन $O(1)$ ऑपरेशन है, जैसा कि सामान्यतः होता है।

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

इन समस्याओं का समाधान खंडित छलनी द्वारा प्रस्तुत किया जाता है, जहां समय में सीमा के केवल कुछ भागों को छलनी किया जाता है। ये 1970 के दशक से जाने जाते हैं, और निम्नानुसार कार्य करते हैं:
 * 1) 2 से $n$ तक की श्रेणी को $Δ ≤ √n$ के किसी आकार के खंडों में विभाजित करें।
 * 2) नियमित छलनी का उपयोग करके प्रथम (अर्थात सबसे कम) खंड में अभाज्य संख्याएँ का परीक्षण करते है।
 * 3) निम्न में से प्रत्येक खंड के लिए, बढ़ते क्रम में, $m$ खंड का सर्वोच्च मान होने के कारण, इसमें अभाज्य संख्याएँ का परीक्षण इस प्रकार करते है:
 * 4) $Δ$ आकार की बूलियन सरणी सेट करें।
 * 5) अब तक पाए गए प्रत्येक अभाज्य $p ≤ √m$ के गुणकों के अनुरूप सरणी में गैर-अभाज्य के रूप में चिह्नित करें, $m - Δ$ और $m$ के मध्य $p$ के निम्नतम गुणज से प्रारम्भ करते हुए $p$ के चरणों में इसके गुणकों की गणना करते है।
 * 6) सरणी में शेष अन्य-चिह्नित स्थान खंड में अभाज्य संख्याओं के अनुरूप हैं। इन अभाज्य संख्याओं के किसी गुणज को चिन्हित करना आवश्यक नहीं है, क्योंकि ये सभी अभाज्य संख्याएँ $√m$, से बड़ी हैं, जैसा कि $k ≥ 1$, के लिए, किसी के समीप $$(k\Delta + 1)^2 > (k+1)\Delta$$ है।

यदि $Δ$ को $√n$ चयन किया गया है, तो एल्गोरिथम की अंतरिक्ष जटिलता $O(√n)$ है, जबकि समय की जटिलता नियमित छलनी के समान है।

ऊपरी सीमा $n$ के साथ श्रेणियों के लिए इतना बड़ा है कि एराटोस्थनीज के पृष्ठ खंडित छलनी की आवश्यकता के अनुसार $√n$ के नीचे की छलनी मेमोरी में फिट नहीं हो सकती है,सोरेनसन की छलनी समान धीमी परन्तु अधिक स्थान-कुशल छलनी का उपयोग किया जा सकता है।

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

primes = [2, 3, ...] \ [[p², p²+p, ...] for p in primes],

संख्याओं की अंकगणितीय प्रगति के सेट घटाव को दर्शाने वाले  के साथ सूची बोध संकेतन का उपयोग करना।

अभाज्य संख्याओं अनुक्रमिक अभाज्य द्वारा विभाज्यता परीक्षण के माध्यम से कंपोजिट को पुनरावृत्त रूप से छलनी करके भी अभाज्य संख्याओं का उत्पादन किया जा सकता है। यह एराटोस्थनीज की छलनी नहीं है, परन्तु प्रायः इसके साथ भ्रमित होता है, एराटोस्थनीज की छलनी उनके लिए परीक्षण के अतिरिक्त सीधे कंपोजिट उत्पन्न करती है। विभाज्यता परीक्षण में अभाज्य संख्याओं की श्रेणी उत्पन्न करने में एराटोस्थनीज की छलनी की अपेक्षा में एल्गोरिदम का सैद्धांतिक विश्लेषण है।

प्रत्येक अभाज्य का परीक्षण करते समय, इष्टतम परीक्षण प्रभाग एल्गोरिथ्म सभी अभाज्य संख्याओं का उपयोग करता है जो इसके वर्गमूल से अधिक नहीं होती हैं, परन्तु एराटोस्थनीज की छलनी प्रत्येक सम्मिश्र को केवल इसके प्रमुख कारकों से उत्पन्न करती है, और सम्मिश्रों के मध्य मुफ्त में अभाज्य प्राप्त करती है। डेविड टर्नर (कंप्यूटर वैज्ञानिक) द्वारा व्यापक रूप से ज्ञात 1975 के कार्यात्मक प्रोग्रामिंग छलनी कोड प्रायः एराटोस्थनीज की छलनी के उदाहरण के रूप में प्रस्तुत किया जाता है परन्तु वास्तव में उप-इष्टतम परीक्षण प्रभाग छलनी है।

एल्गोरिथम जटिलता
एराटोस्थनीज की छलनी कंप्यूटर के प्रदर्शन को बेंचमार्क करने का लोकप्रिय उपाय है। रैंडम एक्सेस मशीन मॉडल में $n$ के नीचे सभी अभाज्य संख्याओं की गणना करने का समय जटिलता $O(n log log n)$ संचालन है, इस तथ्य का प्रत्यक्ष परिणाम है कि अभाज्य हार्मोनिक श्रृंखला स्पर्शोन्मुख रूप से $log log n$ तक पहुंचती है। इसमें इनपुट आकार के संबंध में घातीय समय जटिलता है, चूँकि, जो इसे छद्म-बहुपद एल्गोरिदम बनाता है। मूलभूत एल्गोरिदम को मेमोरी $O(n)$ की आवश्यकता होती है।

एल्गोरिदम की थोड़ी जटिलता $O(n)$ की मेमोरी आवश्यकता के साथ $O ( n (log n) (log log n) )$ बिट संचालन है।

सामान्य रूप से कार्यान्वित किए गए पृष्ठ खंडित संस्करण में गैर-खंडित संस्करण के रूप में $O(n log log n)$ की समान परिचालन जटिलता होती है, किन्तु अंतरिक्ष आवश्यकताओं को खंड पृष्ठ के अधिक न्यूनतम आकार तक कम कर देता है और अभाज्य संख्याओं को एकत्रित करने के लिए आवश्यक मेमोरी से कम आकार $O ( √n⁄log n  )$ है।

बुनियादी अनुकूलन के साथ, एराटोस्थनीज की छलनी का विशेष (संभवतः ही, यदि कभी प्रारम्भ किया गया) खंडित संस्करण, $O(n)$ संचालन और $O ( √nlog log n⁄log n  )$ का उपयोग करता है।  बिग ओ नोटेशन का उपयोग निरंतर कारकों और ऑफसेट को अनदेखा करता है जो व्यावहारिक श्रेणियों के लिए अधिक महत्वपूर्ण हो सकते हैं: प्रिटचर्ड व्हील छलनी के रूप में जाना जाने वाला एराटोस्थनीज भिन्नता की छलनी में   $O(n)$ प्रदर्शन है, परन्तु इसका मूलभूत कार्यान्वयन या तो "एक बड़ी सरणी" एल्गोरिदम की आवश्यकता होती है जो इसकी प्रयोग करने योग्य सीमा को उपलब्ध मेमोरी की मात्रा तक सीमित करती है अन्यथा मेमोरी उपयोग को कम करने के लिए इसे पृष्ठ खंडित करने की आवश्यकता होती है। जब मेमोरी को बचाने के लिए पृष्ठ विभाजन के साथ कार्यान्वित किया जाता है, तो मूल एल्गोरिदम को अभी भी $O ( n⁄log n  )$ आवश्यकता होती है। मेमोरी के बिट्स $O ( √n⁄log n  )$ का उपयोग करके एराटोस्थनीज के मूल पृष्ठ खंडित छलनी की आवश्यकता से अधिक $O(n)$ प्रदर्शन है और स्वीकार्य स्मृति आवश्यकता, यह व्यावहारिक रूप से छलनी की सीमा के लिए एराटोस्थनीज की यथोचित व्हील फैक्टराइज़्ड मूलभूत छलनी से तीव्र नहीं है।

यूलर की छलनी
जीटा उत्पाद सूत्र के यूलर के प्रमाण में एराटोस्थनीज की छलनी का संस्करण सम्मिलित होता है जिसमें प्रत्येक समग्र संख्या को विस्थापित कर दिया जाता है। द्वारा उसी छलनी को फिर से अनुशोधित किया गया और रैखिक समय लेने के लिए देखा गया। यह भी, क्रम में 2 से $n$ तक संख्याओं की सूची (कंप्यूटिंग) के साथ प्रारम्भ होता है। प्रत्येक चरण पर प्रथम एलिमेंट को अगले अभाज्य के रूप में पहचाना जाता है, सूची के प्रत्येक एलिमेंट से गुणा किया जाता है (इस प्रकार स्वयं से प्रारम्भ होता है), और परिणाम पश्चात में विस्थापित करने के लिए सूची में चिह्नित किए जाते हैं। प्रारंभिक एलिमेंट और चिह्नित एलिमेंट को कार्य क्रम से विस्थापित कर दिया जाता है, और प्रक्रिया दोहराई जाती है: 

[2] (3) 5 7  9  11  13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79  ...  [3]    (5) 7     11  13    17 19    23 25    29 31    35 37    41 43    47 49    53 55    59 61    65 67    71 73    77 79  ...  [4]       (7)    11  13    17 19    23       29 31       37    41 43    47 49    53       59 61       67    71 73    77 79  ...  [5]             (11) 13    17 19    23       29 31       37    41 43    47       53       59 61       67    71 73       79  [...]

यहाँ उदाहरण को एल्गोरिथम के प्रथम चरण के पश्चात विषम से प्रारम्भ करते हुए दिखाया गया है। इस प्रकार, पर $k$वें चरण पर $k$th अभाज्य के सभी शेष गुणकों को सूची से विस्थापित कर दिया जाता है, जिसमें पश्चात में प्रथम $k$ अभाज्यों (cf. व्हील फैक्टराइजेशन), के साथ केवल संख्याएँ सम्मिलित होंगी, जिससे कि सूची अगले अभाज्य के साथ प्रारंभ हो सके, और इसके पहले एलिमेंट के वर्ग के नीचे की सभी संख्याएँ भी अभाज्य होंगी।

इस प्रकार, अभाज्य संख्याओं के परिबद्ध अनुक्रम को उत्पन्न करते समय, जब अगला चिन्हित अभाज्य ऊपरी सीमा के वर्गमूल से अधिक हो जाता है, तो सूची में शेष सभी संख्याएँ अभाज्य होती हैं। ऊपर दिए गए उदाहरण में 11 को अगले अभाज्य के रूप में पहचानने पर, 80 से कम या उसके समान सभी अभाज्य संख्याओं की सूची देकर प्राप्त किया जाता है।

ध्यान दें कि किसी चरण द्वारा छोड़ी जाने वाली संख्याएँ अभी भी उस चरण में गुणकों को चिह्नित करते समय उपयोग की जाती हैं, उदाहरण के लिए, 3 के गुणकों के लिए यह है 3 × 3 = 9, 3 × 5 = 15, 3 × 7 = 21, 3 × 9 = 27, ..., 3 × 15 = 45, ..., इसलिए इसके निवारण में सावधानी रखनी चाहिए।

यह भी देखें

 * प्रिचर्ड की छलनी
 * एटकिन की छलनी
 * सुंदरम की छलनी
 * छलनी सिद्धांत

बाहरी संबंध

 * अभाज्य संख्याieve – Very fast highly optimized C/C++ segmented Sieve of Eratosthenes
 * Eratosthenes, sieve of at Encyclopaedia of Mathematics
 * Interactive JavaScript Page
 * Sieve of Eratosthenes by George Beck, Wolfram Demonstrations Project.
 * Sieve of Eratosthenes in Haskell
 * Sieve of Eratosthenes algorithm illustrated and explained. Java and C++ implementations.
 * A related sieve written in x86 assembly language
 * Fast optimized highly parallel CUDA segmented Sieve of Eratosthenes in C
 * SieveOfEratosthenesInManyProgrammingLanguages c2 wiki page
 * The Art of Prime Sieving Sieve of Eratosthenes in C from 1998 with nice features and algorithmic tricks explained.