सीव ऑफ़ सुंदरम

भारतपीडिया से
imported>InternetArchiveBot द्वारा परिवर्तित ०४:४४, १४ जनवरी २०२१ का अवतरण (Adding 3 books for सत्यापनीयता (20210113)) #IABot (v2.0.7) (GreenC bot)
(अंतर) ← पुराना अवतरण | वर्तमान अवतरण (अंतर) | नया अवतरण → (अंतर)
नेविगेशन पर जाएँ खोज पर जाएँ

गणित में सीव ऑफ़ सुंदरम एक निर्दिष्ट पूर्णांक तक सभी अभाज्य संख्याओं को खोजने के लिए एक सरल निर्धारक एल्गोरिथम है। इसकी खोज भारतीय गणितज्ञ एसपी सुंदरम ने 1934 में की थी। [१] [२] उन्हीं के ऊपर इसका नाम पड़ा।

कलन विधि

सुंदरम की छलनी: 202 से नीचे के अपराधों के लिए एल्गोरिदम चरण (अडॉप्टिमाइज्ड)।

एल्गोरिथ्म 1 से लेकर <math>N</math> तक की प्राकृतिक संख्याओं में <math>i+j+2ij</math> रूप की संख्याओं को अलग करने का प्रावधान करता है; जहाँ <math>i\leqslant j</math>  और <math>i+j+2ij \leqslant N</math> शर्तें मान्य हैं;

और

<math>i=1,\;2,\;\ldots,\;\left\lfloor \frac{\sqrt{2N+1}-1}2\right\rfloor</math>

और

<math>j=i,\;i+1,\;\ldots,\;\left\lfloor \frac{N-i}{2i+1}\right\rfloor.</math>

शुद्धता

यह एल्गोरिथ्म एक से बड़े विषम धनात्मक पूर्णांकों (odd positive integers) के साथ काम करता है, जो कि <math>2m+1</math> रूप में हों, जहाँ <math>m</math> एक प्राकृतिक संख्या है।

यदि <math>2m+1</math> समग्र संख्या (composite number) है , इसे एक से अधिक दो विषम संख्याओं के उत्पाद के रूप में दर्शाया जाता है, जो है:

<math>2m+1=(2i+1)(2j+1)</math>,

जहाँ <math>i</math> और <math>j</math> प्राकृतिक संख्याएँ हैं। अनुपात को नीचे जैसा दिया गया है, उस तरह भी समझा जा सकता है:

<math>m=2ij+i+j</math>।

अतः, यदि हम <math>2ij + i + j</math> (जहाँ <math>1 \leqslant i \leqslant j</math>) रूप की सभी  संख्याओं को हटा दें, तो प्रत्येक <math>m</math> के लिए <math>2m+1</math> संख्या सरल (simple, non-composite number) होना चाहिए।

इसके विपरीत, यदि संख्या <math>2m+1</math> अभाज्य (prime number) है तो संख्या <math>m</math> को <math>2ij+i+j</math> के रूप में लिखना असंभव है। इस प्रकार एल्गोरिथ्म के संचालन के दौरान <math>m</math> बाहर नहीं छूटेगा।

C में प्रोग्राम

#include <stdio.h>
int main(void) {
    int i,j,n;
    scanf("%d",&n);
    char a[n];
    
    for (i=1; i<=n; i++)
        a[i]=1;

    for(i=1;2*i*(i+1)<n;i++)
        for(j=i;j<=(n-i)/(2*i+1);j++)
            a[2*i*j+i+j]=0;
    
    for(i=0;i<n;i++)
        if(a[i])
            printf("%d ",2*i+1);
    return 0;
}


यह सभी देखें

  • एराटोस्थनीज की छलनी
  • Atkin की चलनी
  • चलनी सिद्धांत

संदर्भ

बाहरी कड़ियाँ