📘 CodingMarble Learn

एराटोस्थनीज़ की छलनी और लंबा अंकगणित

एराटोस्थनीज़ की छलनी n तक की सभी अभाज्य संख्याएँ ढूँढती है। वह हर अभाज्य संख्या के गुणज उसके वर्ग से शुरू करके काटती है और केवल √n तक की अभाज्य संख्याओं की ज़रूरत पड़ती है। लंबा अंकगणित बहुत बड़ी संख्या को अंकों की सूची में रखता है और कागज़ की तरह अंक-अंक करके जोड़ता, घटाता और गुणा करता है।

🎬 कदम-दर-कदम कहानी

  1. बोर्ड पर 2 से 50 तक की संख्याएँ हैं। हमें अभाज्य संख्याएँ ढूँढनी हैं। अभाज्य के ठीक दो भाजक होते हैं: 1 और वह स्वयं।
  2. सबसे छोटी बची संख्या 2 है। वह रहेगी। अब उसके सारे गुणज काटो: 4, 6, 8 और आगे। आधा बोर्ड लाल हो गया।
  3. अगली बची संख्या 3 है। वह रहेगी। उसके गुणज काटो: 9, 15, 21 … सिर्फ़ नए गुणज लाल हुए, बाकी पहले ही कट चुके थे।
  4. अब 5 और फिर 7। 7 के बाद रुक सकते हैं, क्योंकि अगली अभाज्य संख्या 11 है और 11 × 11 = 121, जो 50 से बड़ा है। हरी संख्याएँ ही सारी अभाज्य हैं।
  5. अब दूसरा काम: दो बहुत बड़ी संख्याओं को जोड़ना। वे एक डिब्बे में नहीं आतीं, इसलिए हर अंक को अपना खाना मिलता है। दाईं ओर से जोड़ो और हासिल बाईं ओर ले जाओ।
  6. अपनी मर्ज़ी से खेलो। स्लाइडर से छलनी को चरण-दर-चरण चलाओ या लंबी संख्याओं को कॉलम-कॉलम जोड़ो।

टिप: 3D दृश्य को घुमाने के लिए खींचें। ज़ूम के लिए दो उंगलियाँ इस्तेमाल करें।

🤔 आम शंकाएँ और उनके जवाब

हम 1 से नहीं, 2 से क्यों शुरू करते हैं?

1 न अभाज्य है न भाज्य। 2 पहली अभाज्य संख्या है, इसलिए छलनी वहीं से शुरू होती है।

2 क्यों नहीं कटती पर 4, 6, 8 कटती हैं?

हम सिर्फ़ अभाज्य के गुणज काटते हैं, अभाज्य को नहीं। 2 सिर्फ़ 1 का गुणज है।

3 के समय थोड़ी ही संख्याएँ नई लाल क्यों हुईं?

6 और 12 जैसी संख्याएँ 2 और 3 दोनों की गुणज हैं। वे पहले ही कट चुकी थीं। इसलिए हम 3² = 9 से शुरू करते हैं।

7 के बाद रुक क्यों सकते हैं?

अगली अभाज्य 11 है और 11 × 11 = 121, 50 से ज़्यादा है। 50 तक की हर भाज्य संख्या का कोई अभाज्य गुणनखंड 7 तक होता है।

जोड़ दाईं ओर से क्यों, बाईं ओर से क्यों नहीं?

हासिल छोटे अंकों से बड़े अंकों की ओर जाता है, इसलिए पहले दाएँ कॉलम का पता होना चाहिए।

अगर योग में एक अंक ज़्यादा हो जाए तो?

तब आख़िरी हासिल नया पहला अंक बन जाता है, जैसे 99 + 1 = 100। कॉलम 6 तक स्लाइडर चलाकर देखो।

अभाज्य संख्याएँ और छलनी का विचार

अभाज्य संख्या वह संख्या है जो 1 से बड़ी हो और जिसके भाजक केवल 1 और वह स्वयं हों: 2, 3, 5, 7, 11 … 1 से बड़ी बाकी सब संख्याएँ भाज्य (संयुक्त) हैं, यानी उनका कोई छोटा भाजक होता है।

एक संख्या n जाँचनी हो तो उसे 2, 3, 4 … से √n तक भाग देकर देखो। पर अगर n तक की सारी अभाज्य संख्याएँ चाहिए, तो 2000 साल से भी पहले यूनानी विद्वान एराटोस्थनीज़ ने तेज़ तरीका सोचा: संख्याएँ जाँचो मत, जो अभाज्य नहीं हो सकतीं उन्हें हटाओ।

एल्गोरिदम चरण-दर-चरण

  1. 2 से n तक सब संख्याएँ लिखो। सबको "शायद अभाज्य" चिह्नित करो।
  2. सबसे छोटी चिह्नित संख्या p लो। वह अभाज्य है।
  3. उसके गुणज p², p² + p, p² + 2p, … n तक काट दो।
  4. चरण 2 पर लौटो। जब p × p, n से बड़ा हो जाए तो रुक जाओ।
  5. जो संख्याएँ कटी नहीं, वे सब अभाज्य हैं।

p² से ही क्यों शुरू करें? 5 × 3 जैसा छोटा गुणज 3 के समय पहले ही कट चुका है। हर भाज्य संख्या का एक अभाज्य गुणनखंड उसके वर्गमूल से छोटा या बराबर होता है, इसलिए √n तक की अभाज्य संख्याएँ काफ़ी हैं।

is_prime = [True] * (n + 1)
is_prime[0] = is_prime[1] = False
p = 2
while p * p <= n:
    if is_prime[p]:
        for m in range(p * p, n + 1, p):
            is_prime[m] = False
    p += 1

गति: लगभग n log log n चरण, यानी लगभग रैखिक। n = 1 करोड़ के लिए भी पलक झपकते खत्म। कीमत: n झंडों जितनी मेमोरी।

लंबे अंकगणित की ज़रूरत क्यों?

आम पूर्णांक चर में सीमित संख्या ही आ सकती है। 64-बिट चिह्नित पूर्णांक लगभग 9.2 × 10¹⁸ पर रुक जाता है, जिसमें 19 अंक हैं। पर 21! में 20 अंक हैं और 100! में 158 अंक। ऐसी संख्याओं के लिए हम लंबा अंकगणित इस्तेमाल करते हैं: संख्या को अंकों की सूची में रखो (अक्सर सबसे छोटा अंक पहले) और स्कूल वाली विधियाँ इस सूची पर चलाओ।

सूची उतनी लंबी हो सकती है जितनी मेमोरी हो। (पायथन जैसी कई भाषाओं में यह पहले से मौजूद है; यह जानना ज़रूरी है कि यह कैसे काम करता है।)

लंबी संख्याओं का जोड़, घटाव और गुणा

जोड़। दाईं ओर से चलो। हर कॉलम में s = a + b + हासिल निकालो। s mod 10 (s का आखिरी अंक) लिखो। नया हासिल s ÷ 10 का पूर्ण भाग है। अंत में हासिल 0 न हो तो उसे नया पहला अंक लिख दो। लागत: हर अंक पर एक चरण, O(n)।

घटाव (बड़ा − छोटा) इसी तरह होता है, पर हासिल की जगह उधार होता है: अंक छोटा हो तो अगले कॉलम से 10 उधार लो।

लंबी संख्या × छोटी संख्या। हर अंक के लिए d × k + हासिल निकालो, आखिरी अंक लिखो और बाकी हासिल दो। इसी से 50! जैसे क्रमगुणित बनते हैं: लंबी संख्या को 2 से, फिर 3 से, फिर 4 से गुणा करते जाओ।

लंबी × लंबी स्कूल वाले गुणा जैसा है: एक संख्या का हर अंक दूसरी के हर अंक से मिलता है, लगभग n × m चरण।

करके देखो: कॉलम से जोड़ो, फिर हाथ से छलनी चलाओ

1) कागज़ पर 2 से 50 तक की संख्याएँ 7 × 7 के खानों में लिखो। लाल पेंसिल से बिल्कुल वही करो जो 3D में हुआ। गिनो कितनी संख्याएँ बचीं। (15 आने चाहिए।) 2) 3D में कॉलम स्लाइडर चलाओ और 874965 + 365879 का हर कॉलम उत्तर देखने से पहले पेंसिल से जाँचो।

मुख्य सूत्र और परिभाषाएँ

हल किए गए उदाहरण

1. छलनी से 30 तक की अभाज्य संख्याएँ निकालो। किन अभाज्य संख्याओं के गुणज काटने पड़ते हैं?

p = 2, 3, 5 देखो (क्योंकि 5 × 5 = 25 ≤ 30, पर 7 × 7 = 49 > 30)। 2, 3 और 5 के गुणज काटो। बचीं: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29। ये 10 अभाज्य संख्याएँ हैं।

2. n = 50 के लिए p = 5 पर हम किस संख्या से काटना शुरू करते हैं? कटने वाली संख्याएँ लिखो।

हम 5² = 25 से शुरू करते हैं। कटती हैं 25, 30, 35, 40, 45, 50। (10, 15 और 20 पहले ही 2 और 3 से कट चुकी थीं।)

3. n = 100 के लिए कौन-सी अभाज्य संख्याएँ p लेनी पड़ेंगी और कितनी अभाज्य बचेंगी?

जिन अभाज्य p के लिए p × p ≤ 100, यानी p ≤ 10: ये 2, 3, 5 और 7 हैं (4 चरण)। फिर 100 से छोटी 25 अभाज्य संख्याएँ बचती हैं।

4. कॉलम से 478 + 595 जोड़ो।

इकाई: 8 + 5 = 13, 3 लिखो, हासिल 1। दहाई: 7 + 9 + 1 = 17, 7 लिखो, हासिल 1। सैकड़ा: 4 + 5 + 1 = 10, 0 लिखो, हासिल 1। हासिल 1 आगे आ गया: 1073।

5. कॉलम से (दाईं ओर से) 874965 + 365879 जोड़ो।

5 + 9 = 14 → 4, हासिल 1। 6 + 7 + 1 = 14 → 4, हासिल 1। 9 + 8 + 1 = 18 → 8, हासिल 1। 4 + 5 + 1 = 10 → 0, हासिल 1। 7 + 6 + 1 = 14 → 4, हासिल 1। 8 + 3 + 1 = 12 → 2, हासिल 1। आख़िरी हासिल 1 सबसे आगे: 1240844।

6. लंबी संख्या 468 को 7 से अंक-अंक करके गुणा करो।

दाईं ओर से: 8 × 7 = 56 → 6 लिखो, हासिल 5। 6 × 7 + 5 = 47 → 7 लिखो, हासिल 4। 4 × 7 + 4 = 32 → 2 लिखो, हासिल 3। हासिल 3 आगे: 3276।

7. 2⁶⁴ में कितने अंक हैं?

2⁶⁴ = 18446744073709551616। लघुगणक से जाँचो: 64 × log₁₀ 2 = 64 × 0.30103 = 19.27, इसलिए ⌊19.27⌋ + 1 = 20 अंक।

आम गलतियाँ

अभ्यास क्विज़

1. छलनी में अभाज्य p को लेने पर कौन-सी संख्याएँ कटती हैं?
2. 200 तक की सब अभाज्य संख्याएँ ढूँढने के लिए कितनी अभाज्य संख्या तक लेनी होंगी?
3. लंबे जोड़ में 8 + 7 + 1 (हासिल) से कौन-सा अंक और हासिल बनेगा?
4. लंबे अंकगणित की ज़रूरत क्यों पड़ती है?
5. छलनी खत्म होने पर जो संख्याएँ कटी नहीं होतीं वे हैं:

अभ्यास: खुद जवाब दो

अपना जवाब लिखो या चुनो, फिर जाँचें दबाओ। अटको तो संकेत देखो; जवाब देने के बाद पूरा हल दिखेगा।

अक्सर पूछे जाने वाले प्रश्न

छलनी हर संख्या को जाँचने से तेज़ क्यों है?

हर संख्या n को जाँचने में लगभग √n भाग लगते हैं। छलनी हर भाज्य संख्या को सिर्फ़ उसके छोटे अभाज्य गुणनखंडों से काटती है, इसलिए कुल काम लगभग n log log n चरण का है।

क्या 1 अभाज्य है?

नहीं। अभाज्य के ठीक दो भाजक होते हैं। 1 का सिर्फ़ एक भाजक है, वह स्वयं।

क्या पायथन में लंबे अंकगणित की ज़रूरत है?

पायथन के अंदर बड़े पूर्णांक पहले से हैं। पर C++ या पास्कल जैसी भाषाओं में इसे खुद बनाना पड़ता है, और यह परीक्षा और प्रतियोगिता का आम प्रश्न है।

पहले यह पढ़ें

आगे पढ़ें

इससे जुड़े पाठ

सभी कंप्यूटर विज्ञान पाठ