题目描述
两个数的最大公约数与最小公倍数的问题解决了,桐桐又进行了进一步的研究。她发现求n个正整数的最大公约数和最小公倍数要复杂一些,你能帮助她解决这个问题吗?
输入输出格式
输入格式
两行,第一行为一个整数n(2≤n≤100),表示一共有n个正整数;第二行有n个正整数,相邻的数用空格隔开,每个数不超过30000。
输出格式
两行,第一行为一个数,表示n个正整数的最大公约数;第二行为一个数,表示n个正整数的最小公倍数。
答案保证不超过长整型。
输入输出样例
输入样例
3
3 4 5
输出样例
1
60
题解
gcd与lcm的深入运用,主要是用当前的gcd求下一个gcd,用当前的lcm求下一个lcm。
#include<iostream> #include<algorithm> using namespace std; int n,a[105],p=1,g; int gcd(int a,int b) { if(a%b) return gcd(b,a%b); else return b; } int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } g=p=a[1]; for(int i=2;i<=n;i++) { g=gcd(max(g,a[i]),min(g,a[i])); } cout<<g<<endl; for(int i=2;i<=n;i++) { g=gcd(max(p,a[i]),min(p,a[i])); p*=a[i]; p/=g; } cout<<p; return 0; }