MnZn求助普及组题目
查看原帖
MnZn求助普及组题目
526895
WYZ20030051楼主2023/7/22 14:34

提交记录

#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<cstring>
#include<algorithm>
#include<cassert>
#include<stack>
#include<queue>
#include<vector>
#include<map>
#include<cstdlib>
using namespace std;
#define ll long long
#define ull unsigned long long
int read()
{
	int now=0,nev=1; 
	char c=getchar();
	while(c<'0' || c>'9') 
	{ 
		if(c=='-') 
			nev=-1; 
		c=getchar();
	}
	while(c>='0' && c<='9') 
	{ 
		now=(now<<1)+(now<<3)+(c&15); 
		c=getchar(); 
	}
	return now*nev;
}
const int MAXN=1e4+10;
const int INF=0x3f3f3f3f3f3f3f;
int n;
int m1,m2;
int a[MAXN];
int prime[MAXN];
int t=2;
int mx=0;
int l,cnt;
int ans=INF;
int main()
{
	memset(prime,0,sizeof(prime));
	n=read();
	m1=read(),m2=read();
	for(int i=1;i<=n;i++)
		a[i]=read();
	if(m1==1)
	{
		printf("0");
		return 0;
	}
	while(m1!=1)
	{
		while(!(m1%t))
		{
			m1/=t;
			prime[t]++;
		}
		mx=max(mx,t);
		prime[t++]*=m2;
		for(int i=1;i<=n;i++)
		{
			l=0;
			for(int j=2;j<=mx;j++)
			{
				if(!prime[j])
					continue;
				cnt=0;
				while(!(a[i]%j))
				{
					a[i]/=j;
					cnt++;
				}
				if(!cnt)
				{
					l=INF;
					break;
				}
				l=max(l,(prime[j]-1)/cnt);
			}
			ans=min(ans,l);
		}
	}
	if(ans==INF)
		printf("-1");
	else
		printf("%d",ans+1);
	return 0;
}
2023/7/22 14:34
加载中...