Start: Jun, 28, 2019 08:42:00
2019杭州师范大学第一届程序设计竞赛新生赛
End: Jun, 28, 2019 11:42:00
Time elapsed:
Time remaining:

Problem_ID: H
Result: Accepted
Time: 67ms
Memory: 5628kB
In contest: 1276

#include <iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<string>
#include<vector>
#include<set>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
using namespace std;
const long long  inf=0x3f3f3f3f3f3f3f3f;
typedef long long LL;

LL gcd(LL a,LL b){return a==0?b:gcd(b%a,a);}

//
//const int maxn=5e5+5;
//struct Tree
//{
//    int l,r,maxx,sum;
//};
//
//Tree node[maxn<<2];
//int a[maxn];
//void PushUp(int i)
//{
//    node[i].sum=node[i<<1].sum+node[(i<<1|1)].sum;
//    node[i].maxx=max(node[i<<1].maxx,node[(i<<1|1)].maxx);
//}
//
//void build(int i,int l,int r)
//{
//    node[i].l=l;node[i].r=r;
//    if(l==r)
//    {
//        node[i].maxx=a[l];
//        node[i].sum=a[l];
//        return ;
//    }
//    int mid=(l+r)/2;
//    build(i<<1,l,mid);
//    build(i<<1|1,mid+1,r);
//    PushUp(i);
//}



LL a[500005];
map<int ,int>vis;
int n;
int main()
{
    LL ans=0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%lld",&a[i]);
        ans=max(ans,a[i]);
    }
    a[n+1]=inf;
    sort(a+1,a+1+n);
    n=unique(a+1,a+1+n)-a-1;
    //printf("**%d\n",n);
    for(int i=1;i<=n;i++)
    {
        if(a[i]==1)continue;
        for(int j=n;j>=1;j--)
        {
            if(a[j]%a[i]!=0&&a[i]%a[j]!=0)
            {
                ans=max(ans,a[j]+a[i]);break;
            }
            if(a[j]==a[i])break;
        }
        //vis[a[i]]=true;
    }
    printf("%lld\n",ans);


    return 0;
}