1. 程式人生 > >【bzoj 2257】瓶子和燃料

【bzoj 2257】瓶子和燃料

傳送門~

解題思路

n 個數中選 k 個使這 k 個數的最大公因數儘可能大。
把每個數分解因數,最大化出現次數大於等於 k 的因數。
程式碼:

#include<algorithm>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdlib>
#include<map>
using namespace std;
map<int
,int>
:: iterator it; map<int,int>cnt; int n,k,ans; int main(){ int x; scanf("%d%d",&n,&k); for(int i=1;i<=n;i++){ scanf("%d",&x); for(int j=1;j*j<=x;j++) if(x%j==0) {cnt[j]++;cnt[x/j]++;} } for(it=cnt.begin();it!=cnt.end();it++) if
(it->second >=k ) ans=it->first; printf("%d",ans); return 0; }