60pts 求助(4个点都少一!)
查看原帖
60pts 求助(4个点都少一!)
342076
Union_of_Britain楼主2021/1/20 15:47
#include<bits/stdc++.h>
using namespace std;
bool v[70005];
int prime[30005];
int cnt=0;
void ens()
{
	v[0]=v[1]=0;
	for(register int i=2;i<=30000;i++)
	{
		if(v[i]==1)
		{
			prime[++cnt]=i;//array prime starts at 1
			for(register int j=i*i;j<=30000;j+=i)
			{
				v[j]=0;
			} 
		}
	}
}
int xbc=0,m1c=0;
int m1[30005];//zhishu
int m1f[30005];
int m1cnt=0;
int md,mz;
int n;
int fk[10005];//i am going to tell the man who create this problem some taboo
int ans=2147483647;
inline void fenjiem()
{
	for(register int i=1;i<=cnt;i++)
	{
		if(md==1)break;
		if(md%prime[i]==0)m1cnt++;
		while(md%prime[i]==0)
		{	
			md/=prime[i];
			m1f[m1cnt]++;
			m1[m1cnt]=prime[i];
		}
	}
}
inline int getx(int x,int p)//x%p==0
{
	register int ct=0;
	while(x%p==0)
	{
		x/=p;++ct;
	}
	return ct;
}
inline int fenjiex(int x)//fail:-1
{
	int p=0;
	for(register int i=1;i<=m1cnt;i++)
	{
		if(x%m1[i]!=0)return -1;
		register int u=getx(x,m1[i]);
		register int cna=ceil(m1f[i]/u);
		if(cna>p)p=cna;
	}
	return p;
}
int main()
{
	//freopen("cell.in","r",stdin);
	//freopen("cell.out","w",stdout);
	memset(m1f,0,sizeof(m1f));
	memset(m1,0,sizeof(m1));
	memset(v,1,sizeof(v));
	ens();
	cin>>n>>md>>mz;
	for(int i=1;i<=n;i++)
	{
		cin>>fk[i];
	}
	fenjiem();
	for(int i=1;i<=m1cnt;i++)
	{
		m1f[i]*=mz;
	}
	for(register int i=1;i<=n;i++)
	{
		register int d=fenjiex(fk[i]);
		if(d!=-1)
		{
			if(ans>d)ans=d;
		}
	}
	if(ans==2147483647)cout<<-1;
	else cout<<ans;
	
	return 0;
}
2021/1/20 15:47
加载中...