传送门biu~
火星人鼓捣燃料的方式是不是很像数学课上老师讲的的更相减损术呢?
根据裴蜀定理,选出K个瓶子能得到的最少燃料是这些数的最大公约数。所以从大到小枚举每个数的约数,当有K个以上的数有相同的约数时,这个数即为最终答案。
#include<bits/stdc++.h>
using namespace std;
int a[1000005],tp;
inline void search(int x){
int to=sqrt(x);
for(int i=1;i<=to;++i){
if(x%i==0){
a[++tp]=i;
if(i!=x/i) a[++tp]=x/i;
}
}
}
int main(){
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;++i){
int x;
scanf("%d",&x);
search(x);
}
sort(a+1,a+tp+1);
int num=1;
for(int i=tp;i>=0;--i){
if(a[i]==a[i+1]) ++num;
else{
if(num>=k){
printf("%d",a[i+1]);
return 0;
}
num=1;
}
}
}