码迷,mamicode.com
首页 > 其他好文 > 详细

B. Divisors of Two Integers

时间:2020-01-18 14:25:38      阅读:98      评论:0      收藏:0      [点我收藏+]

标签:das   red   --   代码   second   names   lse   cst   remember   

B. Divisors of Two Integers

Recently you have received two positive integer numbers xx and y. You forgot them, but you remembered a shuffled list containing all divisors of xx (including 11 and xx) and all divisors of y (including 11 and y). If d is a divisor of both numbers xx and y at the same time, there are two occurrences of d in the list.

For example, if x=4x=4 and y=6y=6 then the given list can be any permutation of the list 1,2,4,1,2,3,6. Some of the possible lists are: 1,1,2,4,6,3,2, 4,6,1,1,2,3,2 or 1,6,3,2,4,1,2.

Your problem is to restore suitable positive integer numbers xx and y that would yield the same list of divisors (possibly in different order).

It is guaranteed that the answer exists, i.e. the given list of divisors corresponds to some positive integers xx and y.

Input

The first line contains one integer n (2≤n≤1282≤n≤128) — the number of divisors of xx and y.

The second line of the input contains n integers d1,d2,…,dnd1,d2,…,dn (1≤di≤1041≤di≤104), where di is either divisor of xx or divisor of y. If a number is divisor of both numbers xx and y then there are two copies of this number in the list.

Output

Print two positive integer numbers xx and y — such numbers that merged list of their divisors is the permutation of the given list of integers. It is guaranteed that the answer exists.

Example

input

10
10 2 8 1 2 4 1 20 4 5

output

20 8

题目描述:

给出一个集合,它是从1~x可以整除x的数集合,和1~y可以整除y的数的集合,合并起来乱序的集合。找出x和y。

分析:

因为它给出了可以包含x和y嘛,那么最大的应该就是y了,关键找到x。如果y不是x的倍数,只要找出最大的不能被y整除的数就是x。而如果x能整除y,那x的除数集合就一定包含在y的集合里面,我们只要找出重复的数中最大的那个就是x了。

代码:

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
 
int main()
{
    int n;
    cin>>n;
    int a[n+6];
    bool used[n+6];
    memset(used,0,sizeof(used));
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    sort(a,a+n);
    int m=a[n-1];
    int k=-1;
    for(int i=0;i<n-1;i++)
    {
        if(!used[i]&&m%a[i]==0)
        {
            used[i]=true;
        } 
        else 
        {
            k=i;
        }
    }
    if(k!=-1)
    printf("%d %d\n",m,a[k]);
    else
    {
        for(int i=n-1;i>=0;i--)
        {
            if(a[i]==a[i-1])
            {
                printf("%d %d\n",m,a[i]);
                break;
            }
        }
        
    }
    return 0;
} 
 

B. Divisors of Two Integers

标签:das   red   --   代码   second   names   lse   cst   remember   

原文地址:https://www.cnblogs.com/studyshare777/p/12208729.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!