एराटोस्थनीज़ की छलनी: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 56: Line 56:
}}, p.&nbsp;16.</ref><ref name="intro">[http://research.cs.wisc.edu/techreports/1990/TR909.pdf Jonathan Sorenson, ''An Introduction to Prime Number Sieves''], Computer Sciences Technical Report #909, Department of Computer Sciences University of Wisconsin-Madison, January 2, 1990 (the use of optimization of starting from squares, and thus using only the numbers whose square is below the upper limit, is shown).</ref>
}}, p.&nbsp;16.</ref><ref name="intro">[http://research.cs.wisc.edu/techreports/1990/TR909.pdf Jonathan Sorenson, ''An Introduction to Prime Number Sieves''], Computer Sciences Technical Report #909, Department of Computer Sciences University of Wisconsin-Madison, January 2, 1990 (the use of optimization of starting from squares, and thus using only the numbers whose square is below the upper limit, is shown).</ref>
एराटोस्थनीज की एल्गोरिथ्म छलनी है
एराटोस्थनीज की एल्गोरिथ्म छलनी है
    इनपुट: एक पूर्णांक ''n'' > 1.
  इनपुट: एक पूर्णांक ''n'' > 1.
    आउटपुट: 2 से लेकर ''n'' तक की सभी अभाज्य संख्याएँ।
  आउटपुट: 2 से लेकर ''n'' तक की सभी अभाज्य संख्याएँ।
   
   
    मान लीजिए ''ए'' [[बूलियन डेटा प्रकार]] मानों की एक सरणी है, जो पूर्णांक 2 से ''एन'' तक अनुक्रमित है,
  मान लीजिए ''ए'' [[बूलियन डेटा प्रकार]] मानों की एक सरणी है, जो पूर्णांक 2 से ''एन'' तक अनुक्रमित है,
    प्रारंभ में सभी सत्य पर सेट हैं।
  प्रारंभ में सभी सत्य पर सेट हैं।
   
 
    ''i'' के लिए = 2, 3, 4, ..., अधिक नहीं {{math|''{{sqrt|n}}''}} करना
  ''i'' के लिए = 2, 3, 4, ..., अधिक नहीं {{math|''{{sqrt|n}}''}} करना
        यदि ''A''[''i''] सत्य है
    यदि ''A''[''i''] सत्य है
            ''j'' = ''i'' के लिए<sup>2</sup>, मैं<sup>2</sup>+i, i<sup>2</sup>+2i, i<sup>2</sup>+3i, ..., n 'do' से अधिक नहीं
      ''j'' = ''i'' के लिए<sup>2</sup>, मैं<sup>2</sup>+i, i<sup>2</sup>+2i, i<sup>2</sup>+3i, ..., n 'do' से अधिक नहीं
                'सेट' ए[जे] := 'गलत'
        'सेट' ए[जे] := 'गलत'
   
   
    सभी i को इस प्रकार 'वापस' करें कि A[i] 'है' 'सत्य'।
  सभी i को इस प्रकार 'वापस' करें कि A[i] 'है' 'सत्य'।


यह एल्गोरिथम सभी अभाज्य संख्याएँ उत्पन्न करता है जो इससे बड़ी नहीं हैं {{mvar|n}}. इसमें एक सामान्य अनुकूलन शामिल है, जिसमें प्रत्येक अभाज्य के गुणजों की गणना शुरू करना शामिल है {{mvar|i}} से {{math|''i''<sup>2</sup>}}. इस एल्गोरिथम की समय जटिलता है {{math|''O''(''n'' log log ''n'')}},{{r|intro}} बशर्ते कि सरणी अद्यतन एक हो {{math|''O''(1)}} ऑपरेशन, जैसा कि आमतौर पर होता है।
यह एल्गोरिथम सभी अभाज्य संख्याएँ उत्पन्न करता है जो इससे बड़ी नहीं हैं {{mvar|n}}. इसमें एक सामान्य अनुकूलन शामिल है, जिसमें प्रत्येक अभाज्य के गुणजों की गणना शुरू करना शामिल है {{mvar|i}} से {{math|''i''<sup>2</sup>}}. इस एल्गोरिथम की समय जटिलता है {{math|''O''(''n'' log log ''n'')}},{{r|intro}} बशर्ते कि सरणी अद्यतन एक हो {{math|''O''(1)}} ऑपरेशन, जैसा कि आमतौर पर होता है।
Line 122: Line 122:
<div शैली=फ़ॉन्ट-आकार:85%; >
<div शैली=फ़ॉन्ट-आकार:85%; >
[2] (3) 5 7 <u>9</u> 11 13 <u>15</u> 17 19 <u>21</u> 23 25 <u>27</u> 29 31 <u >33</u> 35 37 <u>39</u> 41 43 <u>45</u> 47 49 <u>51</u> 53 55 <u>57</u> 59 61 <u >63</u> 65 67 <u>69</u> 71 73 <u>75</u> 77 79 ...
[2] (3) 5 7 <u>9</u> 11 13 <u>15</u> 17 19 <u>21</u> 23 25 <u>27</u> 29 31 <u >33</u> 35 37 <u>39</u> 41 43 <u>45</u> 47 49 <u>51</u> 53 55 <u>57</u> 59 61 <u >63</u> 65 67 <u>69</u> 71 73 <u>75</u> 77 79 ...
  [3] (5) 7 11 13 17 19 23 <u>25</u> 29 31 <u>35</u> 37 41 43 47 49 53 <u>55</u> 59 61 <u>65 </u> 67 71 73 77 79 ...
  [3] (5) 7 11 13 17 19 23 <u>25</u> 29 31 <u>35</u> 37 41 43 47 49 53 <u>55</u> 59 61 <u>65</u> 67 71 73 77 79 ...
  [4] (7) 11 13 17 19 23 29 31 37 41 43 47 <u>49</u> 53 59 61 67 71 73 <u>77</u> 79...
  [4] (7) 11 13 17 19 23 29 31 37 41 43 47 <u>49</u> 53 59 61 67 71 73 <u>77</u> 79...
  [5] (11) 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 ...
  [5] (11) 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 ...
Line 152: Line 152:
* [http://www.algolist.net/Algorithms/Number_theoretic_algorithms/Sieve_of_Eratosthenes Sieve of Eratosthenes algorithm illustrated and explained. Java and C++ implementations.]
* [http://www.algolist.net/Algorithms/Number_theoretic_algorithms/Sieve_of_Eratosthenes Sieve of Eratosthenes algorithm illustrated and explained. Java and C++ implementations.]
* [http://zsmith.co/primes.html A related sieve written in x86 assembly language]
* [http://zsmith.co/primes.html A related sieve written in x86 assembly language]
* [https://sites.google.com/site/bbuhrow/home/cuda-sieve-of-eratosthenes Fast optimized highly parallel CUDA segmented Sieve of Eratosthenes in C]
* [https://sites.google.com/site/bbuhrow/home/cuda-sieve-of-eratosthenes Fast optimized highly parallel CUDA segmented Sieve of Eratosthenes in C]
* [http://wiki.c2.com/?SieveOfEratosthenesInManyProgrammingLanguages SieveOfEratosthenesInManyProgrammingLanguages c2 wiki page]
* [http://wiki.c2.com/?SieveOfEratosthenesInManyProgrammingLanguages SieveOfEratosthenesInManyProgrammingLanguages c2 wiki page]
* [http://wwwhomes.uni-bielefeld.de/achim/prime_sieve.html The Art of Prime Sieving] Sieve of Eratosthenes in C from 1998 with nice features and algorithmic tricks explained.
* [http://wwwhomes.uni-bielefeld.de/achim/prime_sieve.html The Art of Prime Sieving] Sieve of Eratosthenes in C from 1998 with nice features and algorithmic tricks explained.

Revision as of 23:55, 10 July 2023

एराटोस्थनीज़ की छलनी: 121 से नीचे अभाज्य संख्याओं के लिए एल्गोरिदम चरण (अभाज्य वर्ग से शुरू करने के अनुकूलन सहित)।

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

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

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

अवलोकन

Sift the Two's and Sift the Three's:
The Sieve of Eratosthenes.
When the multiples sublime,
The numbers that remain are Prime.

Anonymous[6]

अभाज्य संख्या एक प्राकृतिक संख्या होती है जिसमें दो अलग-अलग प्राकृतिक संख्या विभाजक होते हैं: संख्या 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 से शुरू करके संख्याओं को चिह्नित करना पर्याप्त है p2, के सभी छोटे गुणजों के रूप में p उस बिंदु पर पहले ही चिह्नित किया जा चुका होगा। इसका मतलब यह है कि एल्गोरिदम को चरण 4 में समाप्त करने की अनुमति है जब p2 से बड़ा है n.[1] एक और परिशोधन यह है कि प्रारंभ में केवल विषम संख्याओं को सूचीबद्ध किया जाए, (3, 5, ..., n), और की वृद्धि में गिनती करें 2p चरण 3 में, इस प्रकार केवल विषम गुणजों को चिह्नित किया गया है p. यह वास्तव में मूल एल्गोरिदम में दिखाई देता है।[1][4] इसे पहिया गुणनखंडन के साथ सामान्यीकृत किया जा सकता है, प्रारंभिक सूची केवल पहले कुछ अभाज्य संख्याओं के साथ सहअभाज्य संख्याओं से बनाई जाती है, न कि केवल बाधाओं से (यानी, 2 के साथ सहअभाज्य संख्याएं), और तदनुसार समायोजित वेतन वृद्धि में गिनती की जाती है ताकि केवल ऐसे गुणज हों p उत्पन्न होते हैं जो सबसे पहले उन छोटे अभाज्यों के साथ सहअभाज्य होते हैं।[7]

उदाहरण

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  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 के बाद अगला नंबर 3 है; 3 के बाद सूची में प्रत्येक तीसरे नंबर को 3 की वृद्धि में 3 से गिनकर काट दें (ये सूची में 3 के सभी गुणज होंगे):

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

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

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

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

2 3 5 7 11 13 17 19 23 29

एल्गोरिदम और वेरिएंट

छद्मकोड

एराटोस्थनीज की छलनी को छद्मकोड में इस प्रकार व्यक्त किया जा सकता है:[8][9] एराटोस्थनीज की एल्गोरिथ्म छलनी है

  इनपुट: एक पूर्णांक 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 से i2. इस एल्गोरिथम की समय जटिलता है O(n log log n),[9] बशर्ते कि सरणी अद्यतन एक हो O(1) ऑपरेशन, जैसा कि आमतौर पर होता है।

खंडित छलनी

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

इन समस्याओं का समाधान खंडित छलनी द्वारा प्रस्तुत किया जाता है, जहां एक समय में केवल सीमा के कुछ हिस्सों को ही छलनी किया जाता है।[10] इन्हें 1970 के दशक से जाना जाता है और ये इस प्रकार काम करते हैं:[9][11]

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

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

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

वृद्धिशील छलनी

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

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

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

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

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

एल्गोरिदमिक जटिलता

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

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

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

यूलर की छलनी

रीमैन ज़ेटा फ़ंक्शन के लिए यूलर उत्पाद सूत्र का यूलर का प्रमाण#यूलर उत्पाद सूत्र के प्रमाण में एराटोस्थनीज की छलनी का एक संस्करण शामिल है जिसमें प्रत्येक मिश्रित संख्या को ठीक एक बार हटा दिया जाता है।[9]उसी छलनी को फिर से खोजा गया और रैखिक समय लेने के लिए उसका अवलोकन किया गया Gries & Misra (1978).[19] यह भी 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. व्हील फ़ैक्टराइज़ेशन), ताकि सूची अगले अभाज्य से शुरू होगी, और इसके पहले तत्व के वर्ग के नीचे की सभी संख्याएँ भी अभाज्य होंगी।

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

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

यह भी देखें

संदर्भ

  1. 1.0 1.1 1.2 Horsley, Rev. Samuel, F. R. S., "Κόσκινον Ερατοσθένους or, The Sieve of Eratosthenes. Being an account of his method of finding all the Prime Numbers," Philosophical Transactions (1683–1775), Vol. 62. (1772), pp. 327–347.
  2. 2.0 2.1 2.2 2.3 O'Neill, Melissa E., "The Genuine Sieve of Eratosthenes", Journal of Functional Programming, published online by Cambridge University Press 9 October 2008 doi:10.1017/S0956796808007004, pp. 10, 11 (contains two incremental sieves in Haskell: a priority-queue–based one by O'Neill and a list–based, by Richard Bird).
  3. Hoche, Richard, ed. (1866), Nicomachi Geraseni Pythagorei Introductionis arithmeticae libri II, chapter XIII, 3, Leipzig: B.G. Teubner, p. 30
  4. 4.0 4.1 Nicomachus of Gerasa (1926), Introduction to Arithmetic; translated into English by Martin Luther D'Ooge ; with studies in Greek arithmetic by Frank Egleston Robbins and Louis Charles Karpinski, chapter XIII, 3, New York: The Macmillan Company, p. 204
  5. J. C. Morehead, "Extension of the Sieve of Eratosthenes to arithmetical progressions and applications", Annals of Mathematics, Second Series 10:2 (1909), pp. 88–104.
  6. Clocksin, William F., Christopher S. Mellish, Programming in Prolog, 1984, p. 170. ISBN 3-540-11046-1.
  7. 7.0 7.1 Runciman, Colin (1997). "Functional Pearl: Lazy wheel sieves and spirals of primes" (PDF). Journal of Functional Programming. 7 (2): 219–225. doi:10.1017/S0956796897002670. S2CID 2422563.
  8. Sedgewick, Robert (1992). Algorithms in C++. Addison-Wesley. ISBN 978-0-201-51059-1., p. 16.
  9. 9.0 9.1 9.2 9.3 9.4 9.5 9.6 9.7 Jonathan Sorenson, An Introduction to Prime Number Sieves, Computer Sciences Technical Report #909, Department of Computer Sciences University of Wisconsin-Madison, January 2, 1990 (the use of optimization of starting from squares, and thus using only the numbers whose square is below the upper limit, is shown).
  10. Crandall & Pomerance, Prime Numbers: A Computational Perspective, second edition, Springer: 2005, pp. 121–24.
  11. Bays, Carter; Hudson, Richard H. (1977). "The segmented sieve of Eratosthenes and primes in arithmetic progressions to 1012". BIT. 17 (2): 121–127. doi:10.1007/BF01932283. S2CID 122592488.
  12. J. Sorenson, "The pseudosquares prime sieve", Proceedings of the 7th International Symposium on Algorithmic Number Theory. (ANTS-VII, 2006).
  13. Turner, David A. SASL language manual. Tech. rept. CS/75/1. Department of Computational Science, University of St. Andrews 1975. (primes = sieve [2..]; sieve (p:nos) = p:sieve (remove (multsof p) nos); remove m = filter (not . m); multsof p n = rem n p==0). But see also Peter Henderson, Morris, James Jr., A Lazy Evaluator, 1976, where we find the following, attributed to P. Quarendon: primeswrt[x;l] = if car[l] mod x=0 then primeswrt[x;cdr[l]] else cons[car[l];primeswrt[x;cdr[l]]] ; primes[l] = cons[car[l];primes[primeswrt[car[l];cdr[l]]]] ; primes[integers[2]]; the priority is unclear.
  14. Peng, T. A. (Fall 1985). "छलनी के माध्यम से एक मिलियन प्राइम्स". BYTE. pp. 243–244. Retrieved 19 March 2016.
  15. Pritchard, Paul, "Linear prime-number sieves: a family tree," Sci. Comput. Programming 9:1 (1987), pp. 17–35.
  16. 16.0 16.1 Paul Pritchard, "A sublinear additive sieve for finding prime numbers", Communications of the ACM 24 (1981), 18–23. MR600730
  17. 17.0 17.1 Paul Pritchard, Explaining the wheel sieve, Acta Informatica 17 (1982), 477–485. MR685983
  18. 18.0 18.1 Paul Pritchard, "Fast compact prime number sieves" (among others), Journal of Algorithms 4 (1983), 332–344. MR729229
  19. Gries, David; Misra, Jayadev (December 1978), "A linear sieve algorithm for finding prime numbers" (PDF), Communications of the ACM, 21 (12): 999–1003, doi:10.1145/359657.359660, hdl:1813/6407, S2CID 11990373.


बाहरी संबंध