MNZN求助
查看原帖
MNZN求助
389797
Nemonade楼主2021/10/19 21:33

RT

#include<bits/stdc++.h>
using namespace std;
inline int read(){
	int x=0;bool flag=false;char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-') flag=true;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
	return flag?-x:x;
}
const int N=30005;
int n,m1,m2,fm[N],fs[N],s,tmp,ans=INT_MAX;
int main(){
	n=read(),m1=read(),m2=read(),tmp=m1;
	
	for(int i=2;i*i<=tmp;++i){
		if(m1%i) continue;
		while(!(m1%i)) m1/=i,++fm[i];
	}
	if(m1!=1) ++fm[m1];
	m1=tmp;
	for(int i=1;i<=n;++i) fm[i]*=m2;
	
	while(n--){
		s=read();
		int thans=-1;
		bool flag=false;
		for(int i=2;i*i<=s;++i){
			if(!fm[i]) continue;
			int co=s,sumt=0;
			while(!(co%i)) ++sumt,co/=i;
			if(sumt==0){flag=true;break;}
			int ci=0,sum=0;
			while(sum<fm[i]) sum+=sumt,++ci;
			thans=max(ci,thans);
		}
		if(flag) continue;
		ans=min(ans,thans);
	}
	cout<<ans;
	return 0;
}

//300
2021/10/19 21:33
加载中...