您的位置:首页 > 其它

【bzoj 2257】瓶子和燃料(裴蜀定理)

2018-01-17 20:35 176 查看
传送门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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: