最大公约数(C++)
最大公约数
欧几里得算法
欧几里得算法也称辗转相除法,是求最大公约是最常用也是最简单的方法。
递归实现
#include<iostream>
using namespace std;
int gcd(int a, int b)
{
if(a % b == 0) return b;
return gcd(b, a%b);
}
int main()
{
int a,b;
cin>>a>>b;
cout<<gcd(a, b)<<endl;
return 0;
}
非递归实现
由于递归实现太过耗费空间,并且不能够解决一些计算量过大的数据,所以可以使用循环来进行优化
#include<iostream>
using namespace std;
int gcd(int a, int b)
{
while(a % b != 0)
{
a = b;
b = temp % b;
temp = a;
}
return b;
}
int main()
{
int a,b;
cin>>a>>b;
cout<<gcd(a, b)<<endl;
return 0;
}
最小公倍数
欧几里得算法当然也可以解决最小公倍数的问题
两个数的最小公倍数就是两个数的乘积除以这两个数的最大公约数~
cout<<(a * b)/gcd(a,b);