Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में GCD खोजने के लिए स्टीन का एल्गोरिदम


स्टीन का एल्गोरिदम संख्याओं के GCD की खोज के लिए उपयोग किया जाता है क्योंकि यह दो गैर-ऋणात्मक पूर्ण संख्याओं के सर्वोत्तम नियमित भाजक की गणना करता है। यह विभाजन को गणितीय बदलावों, परीक्षाओं और घटाव से बदल देता है। यदि दोनों a और b 0 हैं, तो gcd शून्य है gcd(0, 0) = 0। GCD(a,b) के लिए एल्गोरिदम निम्नानुसार है;

एल्गोरिदम

शुरुआत    चरण-1: जांचें यदि a और b दोनों 0 हैं, तो gcd शून्य है gcd(0, 0) = 0।    चरण-2: तब gcd(a, 0) = a और gcd(0, b) = b क्योंकि सब कुछ 0 को विभाजित करता है।    चरण-3: जांचें यदि a और b दोनों सम हैं, तो gcd(a, b) = 2*gcd(a/2, b/2) क्योंकि 2 एक सामान्य भाजक है। 2 से गुणा बिटवाइज़ शिफ्ट ऑपरेटर से किया जा सकता है।    चरण-4: यदि a सम है और b विषम है, तो gcd(a, b) = gcd(a/2, b)। इसी तरह, यदि a विषम है और b सम है, तो gcd(a, b) = gcd(a, b/2)। ऐसा इसलिए है क्योंकि 2 एक सामान्य भाजक नहीं है।    चरण-5: यदि a और b दोनों विषम हैं, तो gcd(a, b) = gcd(|a-b|/2, b)। ध्यान दें कि दो विषम संख्याओं का अंतर सम होता है    चरण-6: चरण 3-5 को तब तक दोहराएं जब तक a = b, या a = 0 न हो जाए। अंत

उपरोक्त एल्गोरिदम के दृष्टिकोण से 2 संख्याओं के GCD की गणना करने के लिए, निम्नलिखित C++ कोड लिखा गया है;

उदाहरण

#include <bits/stdc++.h> using namespace std; int funGCD(int x, int y){    if (x == 0)       return y;    if (y == 0)       return x;    int k;    for (k = 0; ((x | y) && 1) == 0; ++k){       x >>= 1;       y >>= 1;    }    while ((x > 1) == 0)       x >>= 1;    do {       while ((y > 1) == 0)          y >>= 1;          if (x > y)             swap(x, y); // u और v को स्वैप करें।          y = (y - x);    }    while (y != 0);       return x << k; } int main(){    int a = 24, b = 18;    printf("संख्याओं (24,18) का परिकलित GCD है= %d\n", funGCD(a, b));    return 0; }

आउटपुट

अंत में, स्टीन के एल्गोरिदम को लागू करके दो आपूर्ति की गई संख्या 24 और 18 का GCD 6 में गणना की जाती है;

संख्याओं (24,18) का परिकलित GCD है= 6

  1. ऑप्टिमल पेज रिप्लेसमेंट एल्गोरिदम के लिए C++ प्रोग्राम ऑप्टिमल पेज रिप्लेसमेंट एल्गोरिदम के लिए C++ प्रोग्राम

    पेज नंबर और पेज साइज़ दिए गए हैं; कार्य ऑप्टिमल पेज रिप्लेसमेंट एल्गोरिदम का उपयोग करके मेमोरी ब्लॉक को पेज में आवंटित करते समय हिट्स और मिस की संख्या ढूंढना है। ऑप्टिमल पेज रिप्लेसमेंट एल्गोरिदम क्या है? ऑप्टिमल पेज रिप्लेसमेंट एल्गोरिदम एक पेज रिप्लेसमेंट एल्गोरिदम है। एक पेज रिप्लेसमेंट एल्गोरि

  1. C++ में बेलमैन-फोर्ड एल्गोरिदम C++ में बेलमैन-फोर्ड एल्गोरिदम

    बेलमैन-फोर्ड एल्गोरिदम एक डायनामिक प्रोग्रामिंग एल्गोरिदम है जिसका उपयोग किसी भी शीर्ष के सबसे छोटे पथ को खोजने के लिए किया जाता है जिसे एक शीर्ष से प्रारंभिक शीर्ष के रूप में माना जाता है। यह एल्गोरिदम पुनरावृत्त विधि का पालन करता है और लगातार सबसे छोटा पथ खोजने का प्रयास करता है। बेलमैन-फोर्ड एल्

  1. C++ में फ्लेयूरी एल्गोरिदम से ऑयलरियन पाथ या सर्किट प्रिंट करें C++ में फ्लेयूरी एल्गोरिदम से ऑयलरियन पाथ या सर्किट प्रिंट करें

    फ्लेयूरी एल्गोरिदम का उपयोग दिए गए ग्राफ़ से ऑयलर पाथ या ऑयलर सर्किट प्रदर्शित करने के लिए किया जाता है। इस एल्गोरिदम में, एक एज से शुरू करके, यह पिछले वर्टेक्स को हटाकर अन्य एडजेसेंट वर्टेक्स की ओर जाने का प्रयास करता है। इस ट्रिक का उपयोग करके, ग्राफ़ प्रत्येक चरण में सरल होता जाता है ताकि ऑयलर पा