स्टीन के एल्गोरिदम का उपयोग संख्याओं के जीसीडी की खोज के लिए किया जाता है क्योंकि यह दो गैर-ऋणात्मक पूर्ण संख्याओं के सर्वोत्तम नियमित भाजक की गणना करता है। यह गणित के आंदोलनों, परीक्षाओं और घटाव के साथ विभाजन को बदल देता है। इस घटना में कि a और b दोनों 0 हैं, gcd शून्य gcd(0, 0) =0 है। GCD(a,b) के लिए एल्गोरिथम निम्नानुसार है;
एल्गोरिदम
START Step-1: check If both a and b are 0, gcd is zero gcd(0, 0) = 0. Step-2: then gcd(a, 0) = a and gcd(0, b) = b because everything divides 0. Step-3: check If a and b are both even, gcd(a, b) = 2*gcd(a/2, b/2) because 2 is a common divisor. Multiplication with 2 can be done with a bitwise shift operator. Step-4: If a is even and b is odd, gcd(a, b) = gcd(a/2, b). Similarly, if a is odd and b is even, then gcd(a, b) = gcd(a, b/2). It is because 2 is not a common divisor. Step-5: If both a and b are odd, then gcd(a, b) = gcd(|a-b|/2, b). Note that difference of two odd numbers is even Step-6: Repeat steps 3–5 until a = b, or until a = 0. END
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); // Swap u and v.
y = (y - x);
}
while (y != 0);
return x << k;
}
int main(){
int a = 24, b = 18;
printf("Calculated GCD of numbers (24,18) is= %d\n", funGCD(a, b));
return 0;
} आउटपुट
आखिरकार, दो आपूर्ति की गई संख्या 24 और 18 की GCD की गणना 6 में स्टीन के एल्गोरिदम को निम्नानुसार लागू करके की जाती है;
Calculated GCD of numbers (24,18) is= 6