VBA Excel - अभाज्य संख्याएँ
VBA Excel - अभाज्य संख्याएँ
परिचय
Eratosthenes की छलनी एक एल्गोरिथ्म है जो हमें एक विशिष्ट सीमा ( n वें नंबर) तक सभी प्रमुख संख्याओं को खोजने की अनुमति देता है। इसमें सभी नंबरों के माध्यम से 2 से n तक लूपिंग शामिल है, यह जांचने के लिए कि क्या सक्रिय संख्या एक से अधिक है। यदि यह एक बहु नहीं है, तो संख्या एक अभाज्य संख्या है।- अधिक जानकारी एराटोस्थनीज की चलनी को abou: विकिपीडिया: //en.wikipedia.org/wiki/Sieve_of_Eratosthenes
एल्गोरिथ्म
पहले हमें NbreMax तक सभी नंबरों की सूची की आवश्यकता होगी।- 1 को हटा दिया जाता है।
- 2 को हाइलाइट करें और इसके सभी मल्टीपल को खत्म करें
- संख्या 3 के लिए ऑपरेशन दोहराएं।
- सबसे छोटी गैर हाइलाइट की गई संख्या चुनें और फिर इसके सभी गुणकों (संख्या 5, ...) को हटा देती है।
- जब तक आप n की जड़ के पूर्णांक भाग तक नहीं पहुंचते तब तक इस प्रक्रिया को दोहराएं।
शेष सभी संख्याएँ (n तक) अभाज्य संख्याएँ हैं!
कार्यक्रम
इस प्रकार के फ़ंक्शन को एक पूर्णांक या लंबी संख्या प्रकार को वापस करने के लिए आसानी से संशोधित किया जा सकता है ... कोड निष्पादित करने के लिए काफी धीमा है, इसलिए हम अपने आप को पहले 1500 प्रमुख संख्याओं तक सीमित कर लेंगे ...फंक्शन NbPremiers_Eratosthene (Rang As Long) वेरिएंट के रूप मेंFor एराटोस्थनीज की छलनी का उपयोग करके nth अभाज्य संख्या की जाँच करें
डिम आई अस लॉन्ग, जे अस लॉन्ग, के अस लॉन्ग, नेब्रामेक्स लॉन्ग, एस्ट_प्रेमियर (), फ्लैग कॉटेजियन
यदि रंग> = 1 और रंग <= 1500 तब
फिर से तैयार करें est_premier (रंग)
के = ०
NbreMax = 20 * रंग का प्रत्यय अन रंग <1500 है
ध्वज = सच्चा
I = 2 के लिए NbreMax
J = 2 से i के लिए
अगर j = i तो इसके लिए बाहर निकलें
अगर मैं मॉड j = 0 तो फ़्लैग = गलत: इसके लिए बाहर निकलें
आगामी
यदि ध्वज = सत्य
अगर मैं = 2 तो
est_premier (k) = 1
के = के + १
अन्य
est_premier (k) = i
के = के + १
अगर अंत
अन्य
ध्वज = सच्चा
अगर अंत
यदि k = रंग है तो बाहर निकलें
अगला मैं
NbPremiers_Eratosthene = est_premier (रंग - 1)
अन्य
NbPremiers_Eratosthene = "रंग की फसल ग्रैंड कहां ट्रॉप पेटिट (कॉम्प्रेस एंट्रे 1 एट 1500 इंक्लूसिव)।"
अगर अंत
अंत समारोह
समारोह का आह्वान
दो तरीके उपलब्ध हैं:Nth प्राइम नंबर
उप परीक्षण ()'499 वाँ प्राइम नंबर पाने के लिए:
MsgBox NbPremiers_Eratosthene (499)
अंत उप
पहले 99 अभाज्य संख्याओं की सूची प्राप्त करें
उप ListeNbPrems ()'पहले 99 अभाज्य संख्याओं की सूची प्राप्त करें
डिम आई अस लॉन्ग, मिसग अस स्टिंग, टीबी (98)
I = 1 से 99 के लिए
Tb (i - 1) = NbPremiers_Eratosthene (i)
अगला मैं
MsgBox Tb (0) और "" और Tb (1) और "" और Tb (2) और "..." और Tb (UBound (Tb))
अंत उप