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

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

यह प्रत्येक अभाज्य के गुणजों को मिश्रित संख्या (अर्थात अभाज्य नहीं) के रूप में चिह्नित करके, पहले अभाज्य संख्या 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$ को दिया गया प्रत्येक मान अभाज्य होगा, क्योंकि यदि यह समग्र होता तो इसे किसी अन्य, छोटे अभाज्य के गुणज के रूप में चिह्नित किया जाता। ध्यान दें कि कुछ संख्याओं को एक से अधिक बार चिह्नित किया जा सकता है (उदाहरण के लिए, 3 और 5 दोनों के लिए 15 को चिह्नित किया जाएगा)।

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

एक और परिशोधन यह है कि प्रारंभ में मात्र विषम संख्याओं को सूचीबद्ध किया जाए, $(3, 5, ..., n)$, और चरण 3 में $2p$ की वृद्धि में गिनती की जाए, इस प्रकार मात्र $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 तक की प्रत्येक अभाज्य संख्याएँ। मान लीजिए A बूलियन डेटा प्रकार की एक सरणी है, जो पूर्णांक 2 से n द्वारा अनुक्रमित है, प्रारंभ में प्रत्येक समूह पर सत्य होती हैं। i = 2, 3, 4, ... के लिए, √n से अधिक नहीं होती है यदि A[i] सत्य होताहै j = i2, i2+i, i2+2i, i2+3i, ..., के लिए, n से अधिक नहीं होता है समूह A[j] := असत्य प्रत्येक i को ऐसे लौटाएँ कि A[i] सत्य हो।

यह कलन विधि प्रत्येक अभाज्य संख्याएँ उत्पन्न करता है जो $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$ विषम अभाज्य संख्याओं के लिए) उत्पन्न होते हैं। दक्षता पर प्रतिकूल प्रभाव से बचने के लिए, उत्पादन तभी प्रारम्भ किया जाना चाहिए जब अभाज्य वर्ग पहुंच जाए। इस प्रकार इसे डेटाफ्लो प्रोग्रामिंग प्रतिमान के तहत प्रतीकात्मक रूप से व्यक्त किया जा सकता है

अभाज्य संख्याएँ = [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.