两个数的最大公约数(GCD)是将两个数相除的最大数。
例如:假设我们有两个数字63和21。
63 = 7 * 3 * 3 21 = 7 * 3
因此,GCD分别为63和21。
递归Euclid算法通过使用一对正整数a和b并返回b和a%b直到b为零来计算GCD。
给出了使用递归Euclid算法找到两个数字的GCD的程序,如下所示-
#include <iostream> using namespace std; int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); } int main() { int a , b; cout<<"Enter the values of a and b: "<<endl; cin>>a>>b; cout<<"GCD of "<< a <<" and "<< b <<" is "<< gcd(a, b); return 0; }
输出结果
上面程序的输出如下-
Enter the values of a and b: 105 30 GCD of 105 and 30 is 15
在上面的程序中,gcd()
是一个递归函数。它具有两个参数,即a和b。如果b等于0,则a返回到main()
函数。否则,该gcd()
函数以b和a%b值递归调用自身。以下代码片段对此进行了演示-
int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); }
在该main()
方法中,从用户请求a和b的值。然后gcd()
调用函数并显示a和b的GCD值。这在下面看到-
int main() { int a , b; cout<<"Enter the values of a and b: "<<endl; cin>>a>>b; cout<<"GCD of "<< a <<" and "<< b <<" is "<< gcd(a, b); return 0; }