给你一个混排的数列,其中包含x的所有除数(包括1和x)和y的所有除数(包括1和y)。如果d同时是x和y的除数,则列表中d将会出现两次。
例如,x = 4,y = 6,则给定列表可以是列表[1,2,4,1,2,3,6]的任何排列。一些可能的列表是:[1,1,2,4,6,3,2],[4,6,1,1,2,3,2]或[1,6,3,2,4,1,2]。
现在给定一个数列,它是某两个正整数x和y的所有除数列表。请你帮忙找出这两个正整数x和y。
输入格式:
第一行包含一个整数n(2≤n≤128),表示数列包含的数的个数。
第二行包含n个整数d1,d2,…,dn(1≤di≤10^4),其中di是x的除数或y的除数。如果一个数字同时是x和y的除数,则数组中有两个该数字。
输入保证答案存在。
输出格式:
输出仅一行,包含两个正整数x和y (x>=y),以空格分隔。
输入样例:
10
10 2 8 1 2 4 1 20 4 5
输出样例:
20 8
#include<bits/stdc++.h>
using namespace std;
void f(int n,vector<int>d){
for(int i=1;i<=n/2;i++){
if(n%i==0){
d.push_back(i);
d.push_back(n/i);
}
}
}
int b[10000]={0};
int main(){
int n;cin>>n;
int a[n];
for(int i=0;i<n;i++){
cin>>a[i];
b[a[i]]++;
}
sort(a,a+n);
cout<<a[n-1]<<" ";
for(int i=n-2;i>=0;i--){
if(a[n-1]%a[i]==0&&b[a[i]]==1) continue;
vector<int>d;
f(i,d);
int j=0;
for(j=0;j<d.size();j++){
if(b[d[j]]==0) break;
}
if(j==d.size()){
cout<<a[i];
return 0;
}
}
return 0;
}