最大公约数(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);

posted @ 2022-04-07 21:13  Tqqj  阅读(190)  评论(0)    收藏  举报