算法:欧几里得

4 阅读1分钟
假如需要求 1997 和 615 两个正整数的最大公约数,用欧几里得算法,是这样进行的:
1997 ÷ 615 = 3 (余 152)
615 ÷ 152 = 4(余7)
152 ÷ 7 = 21(余5)
7 ÷ 5 = 1 (余2)
5 ÷ 2 = 2 (余1)
2 ÷ 1 = 2 (余0)
至此,最大公约数为1
以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数,所以就得出了 1997 和 615 的最大公约数 1。

gcd(a,b) = gcd(b,a mod b)

最大公约数

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//欧几里得算法 
ll a,b,c;
//求最大公约数 
//ll gcd(ll a,ll b)
//{
//	if(b==0)
//	return a;
//	else
//	return gcd(b,a%b);
//}
ll gcd(ll a,ll b)
{
	return b == 0 ? a : gcd(b,a%b);
}

最小公倍数

ll lcm(ll a,ll b)
{
	return a/gcd(a,b)*b;
}