【题解】桐桐的深入研究

题目描述

  两个数的最大公约数与最小公倍数的问题解决了,桐桐又进行了进一步的研究。她发现求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;
}
参考程序

猜你喜欢

转载自www.cnblogs.com/kcn999/p/10584849.html
今日推荐