最大公约数gcd与最小公倍数lcm

求两个数的最大公约数GCD,使用欧几里德算法

// gcd(a,b)等于gcd(b,a Mod b)
int gcd(int a, int b)
{
	if (b==0)
		return a;
	else
		return gcd(b, a%b);
}

求n个数的最大公约数

// 先求a[0],a[1]的公约数,再求其与a[2]d的公约数,依次类推
int ngcd(int *a, int n)
{
	if (n==1)
		return *a;
	else
		return gcd(a[n-1], ngcd(a, n-1));
}

求两个数的最大公倍数lcm

// ab的最小公倍数=ab的乘积除以最大公约数
int lcm(int a, int b)
{
	return a*b/gcd(a,b);
}

求n个数的最大公倍数

// 与ngcd类似
int nlcm(int *a, int n)
{
	if (n==1)
		return *a;
	else
		return lcm(a[n-1], nlcm(a, n-1)); 
}


你可能感兴趣的:(最大公约数gcd与最小公倍数lcm)