[JSOI2009] 瓶子和燃料

[JSOI2009] 瓶子和燃料

根据裴蜀定理可以知道,ax+byax+by 能凑出最小的正整数为 gcd(a,b)gcd(a,b)

所以选择几个瓶子,答案就是几个瓶子的 gcdgcd。故将每个数分解因数,找最大且出现至少 kk 次的因数即可。

#include<bits/stdc++.h>
using namespace std;
const int N =1e6+10;
map<int,int> a;
inline long long read()
{
    register long long x=0,f=0;
    register char t=getchar();
    while(t<'0'||t>'9')f^=(t=='-'),t=getchar();
    while(t>='0'&&t<='9')x=(x<<3)+(x<<1)+(t^48),t=getchar();
    return f?-x:x;
}
int main()
{
	int n,k;
	n=read(),k=read();
	int maxx=-1e6-10;
	for(int i=1;i<=n;i++)
	{
		int v;
		v=read();
		for(int j=1;j*j<=v;j++)
		{
			if(v%j==0)
			{
				a[j]++;
				a[v/j]++;
			}
		}
		if(sqrt(v)*sqrt(v)==v)
			a[sqrt(v)]--;
	}
	for(map<int,int>::iterator it=a.end();it!=a.begin();it--)
	{
		if((*it).second>=k)
		{
			cout<<(*it).first<<endl;
			return 0;
		}
	}
}
posted @ 2022-06-10 14:02  June_Failure  阅读(6)  评论(0)    收藏  举报  来源