Lowest Common Multiple Plus

#include <cstdio>

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

int main()
{
	int n, a, b;
	while(scanf("%d", &n) != EOF)
	{
		scanf("%d", &a);
		n = n - 1;
		while(n --)
		{
			scanf("%d", &b);
			a = (a / gcd(a, b)) * b;       // (a*b)/gcd(a, b) 有可能出现不能整除下取整的情况, 而(a/gcd(a, b))*b一定会整除 
		}
		printf("%d\n", a);
	}
	
	return 0;
}

  

#include <cstdio>

int gcd(int a, int b)
{
	return b ? gcd(b, a % b) : a;
}

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

int main()
{
	int n, a, b;
	while(scanf("%d", &n) != EOF)
	{
		scanf("%d", &a);
		n --;
		while(n --)
		{
			scanf("%d", &b);
			a = lcm(a, b);
		}
		printf("%d\n", a);
	}
	
	return 0;
}

  

最小公倍数的求解在最大公约数的基础上运行. 当得到a和b的最大公约数d之后, 可以马上得到a和b最小公倍数是ab / d.

由于ab在实际运算中可能会溢出,因此更恰当的写法是a / d * b.由于d是a的约数,所以a/d一定可以整除.(d是最大公因数)

posted @ 2019-07-30 17:31  青衫客36  阅读(138)  评论(0编辑  收藏  举报