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

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

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

छलनी का सबसे पहला ज्ञात संदर्भ (κόσκινον Ἐρατοσθένους, कोस्किनन एराटोस्थेनस) निकोमैचस के अंकगणित के परिचय में है, एक प्रारंभिक दूसरा प्रतिशत. सीई पुस्तक जो इसका श्रेय तीसरी शताब्दी के एराटोस्थनीज़ को देती है। ईसा पूर्व ग्रीक गणित, हालांकि अभाज्य संख्याओं के बजाय विषम संख्याओं द्वारा छानने का वर्णन करता है। कई जनरेटिंग प्राइम्स#प्राइम छलनी में से एक, यह सभी छोटे प्राइम्स को खोजने के सबसे प्रभावी तरीकों में से एक है। इसका उपयोग अंकगणितीय प्रगति में अभाज्य संख्या ज्ञात करने के लिए किया जा सकता है।

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

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


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

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

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

उदाहरण
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

छद्मकोड
एराटोस्थनीज की छलनी को छद्मकोड में इस प्रकार व्यक्त किया जा सकता है: एराटोस्थनीज की एल्गोरिथ्म छलनी है इनपुट: एक पूर्णांक n > 1. आउटपुट: 2 से लेकर n तक की सभी अभाज्य संख्याएँ। मान लीजिए ए बूलियन डेटा प्रकार मानों की एक सरणी है, जो पूर्णांक 2 से एन तक अनुक्रमित है, प्रारंभ में सभी सत्य पर सेट हैं। i के लिए = 2, 3, 4, ..., अधिक नहीं $√n$ करना यदि A[i] सत्य है j = i के लिए2, मैं2+i, i2+2i, i2+3i, ..., n 'do' से अधिक नहीं 'सेट' ए[जे] := 'गलत' सभी i को इस प्रकार 'वापस' करें कि A[i] 'है' 'सत्य'।

यह एल्गोरिथम सभी अभाज्य संख्याएँ उत्पन्न करता है जो इससे बड़ी नहीं हैं $n$. इसमें एक सामान्य अनुकूलन शामिल है, जिसमें प्रत्येक अभाज्य के गुणजों की गणना शुरू करना शामिल है $i$ से $i^{2}$. इस एल्गोरिथम की समय जटिलता है $O(n log log n)$, बशर्ते कि सरणी अद्यतन एक हो $O(1)$ ऑपरेशन, जैसा कि आमतौर पर होता है।

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

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

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

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

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

अभाज्य संख्याएँ = [2, 3, ...] \ p², p²+p, ...] अभाज्य संख्याओं में p के लिए],

सूची समझ संकेतन का उपयोग करना  पूरक को निरूपित करना (सेट सिद्धांत)#संख्याओं की अंकगणितीय प्रगति का सापेक्ष पूरक।

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

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

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

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

बुनियादी अनुकूलन के साथ एराटोस्थनीज की छलनी का एक विशेष (शायद ही कभी, लागू किया गया) खंडित संस्करण, उपयोग करता है $O(n)$ संचालन और $O ( √nlog log n⁄log n  )$ स्मृति के टुकड़े। बड़े O नोटेशन का उपयोग निरंतर कारकों और ऑफसेट को अनदेखा करता है जो व्यावहारिक श्रेणियों के लिए बहुत महत्वपूर्ण हो सकते हैं: एराटोस्थनीज भिन्नता की छलनी जिसे प्रिचर्ड व्हील छलनी के रूप में जाना जाता है  एक है $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$वें अभाज्य को सूची से हटा दिया गया है, जिसमें उसके बाद केवल पहले के साथ सहअभाज्य संख्याएँ होंगी $k$ अभाज्य (cf. व्हील फ़ैक्टराइज़ेशन), ताकि सूची अगले अभाज्य से शुरू होगी, और इसके पहले तत्व के वर्ग के नीचे की सभी संख्याएँ भी अभाज्य होंगी।

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

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

यह भी देखें

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

बाहरी संबंध

 * primesieve – 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.