Stein在C ++中查找GCD的算法

Stein算法用于发现数字的GCD,因为它计算了两个非负整数的最佳正则数。它用数学运算,考试和减法代替除法。如果an和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;

}

输出结果

最后,通过应用斯坦因算法(Stein's Algorithm),在6中计算两个提供的数字24和18的GCD。

Calculated GCD of numbers (24,18) is= 6

以上是 Stein在C ++中查找GCD的算法 的全部内容, 来源链接: utcz.com/z/331154.html

回到顶部