Description
给出N个数字,从中选出K个来 使得这K个数字的最大公约数最大。
Format
Input
第1行:2个整数N,K,
第2..N 行:每行1个整数,第i+1 行的整数为Vi
N<=1000 Vi<=1000000000
Output
仅1行,一个整数,如题 。
Samples
输入数据 1
4 2
10
18
24
60
Copy
输出数据 1
12
Copy
输入数据 2
4 3
10
18
24
60
Copy
输出数据 2
6
思路
用map解决
代码见下:
#include<bits/stdc++.h>
using namespace std;
bool b[1000001];
int n,a[101092];
int f=1,u,jl,m,js[10000002];
int main(){
map<int,int> t;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
u=max(u,a[i]);
for(int j=1;j<=sqrt(a[i]);j++){
if(a[i]%j==0){
jl++;
js[jl]=j;
if(a[i]/j!=j) js[++jl]=a[i]/j;
}
}
}
sort(js+1,js+jl+1);
for(int i=jl;i>=1;i--){
if(js[i]==js[i-m+1]){
cout<<js[i];
break;
}
}
//cout<<n/f;
return 0;
}