描述
输入N及N个正整数。N不大于1000。
输出这N个数的最大公约和最小公倍数
输入
输入N及N个正整数。N不大于1000。
输出
输出这N个数的最大公约和最小公倍数
样例输入
3
2 4 8
5
3 6 8 9 12
样例输出
2 8
1 72
思路
gcd(greatest common divisor)计算最大公约数利用辗转相除法,基本思想为通过不断取两个数的余数,再用较小的数去除较大的数,直到余数为0,余数为0时,较小的数就是最大公约数
lcm(least common multiple)方法是使用最大公约数。根据数学原理,两个数的最小公倍数等于两个数的乘积除以它们的最大公约数
code
#include<iostream>
#include<iomanip>
using namespace std;
int gcd(int a,int b){if(b==0) return a;return gcd(b,a%b);
}
int lcm(int a,int b){return (a*b)/gcd(a,b);
}
int main()
{int n;while(cin>>n){int nums[n];for(int i=0;i<n;i++){cin>>nums[i];}int max_gcd=nums[0],min_lcm=nums[0];for(int i=0;i<n;i++){max_gcd=gcd(max_gcd,nums[i]);min_lcm=lcm(min_lcm,nums[i]);}cout<<max_gcd<<' '<<min_lcm<<endl;}return 0;
}