7-1 两个整数的除数

给你一个混排的数列,其中包含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[j]==0)	break;
		}
		if(j==d.size()){
			cout<<a[i];
			return 0;
		}
	}
	return 0;
}
发布了23 篇原创文章 · 获赞 8 · 访问量 1358

猜你喜欢

转载自blog.csdn.net/qq_45550552/article/details/104884078
7-1