有一系列正整数,求它们的最大公约数和最小公倍数,原始正整数和最终结果都在32位正整数范围内。
输入格式:
数据有多组,每组数据占一行,第1个数代表本组数据正整数个数,正整数个数至少为1。
输出格式:
针对每组输入数据,输出数据占一行,含最大公约数和最小公倍数,中间以一个空格分隔。
输入样例:
2 6 8
4 6 8 12 20
1 15
6 5 12 12 30 46 10
输出样例:
2 24
2 120
15 15
1 1380
#include <stdio.h>
#include <math.h>
int CommonDivisor(int m,int n)
{
int t;
while(t = m % n)
{
m = n;
n = t;
}
return n;
}
int CommonMultiples(int x,int y)
{
return (x * y / (CommonDivisor(x,y)));
}
int main()
{
int n;
while(~scanf("%d", &n))
{
int a[n],i;
scanf("%d", &a[0]);
int CommonMultiples1 = a[0],CommonDivisor1 = a[0];
for(i = 1; i < n; i++)
{
scanf("%d", &a[i]);
CommonMultiples1 = CommonMultiples(CommonMultiples1,a[i]);
CommonDivisor1 = CommonDivisor(CommonDivisor1,a[i]);
}
printf("%d %d\n", CommonDivisor1, CommonMultiples1);
}
return 0;
}