30pts求调%%%
查看原帖
30pts求调%%%
1009001
HCA_ac_life楼主2024/10/7 10:55
#include<bits/stdc++.h>
using namespace std;
#define ll long long 
bool vis[30001];
ll prime[30001];
ll dnum[30001][2];
ll dnum_x[30001][2];
ll cnt=1,cnt1=1;
ll m1,m2,n,cell;
inline ll read(){
	ll a=0;ll f=0;char p=getchar();
	while(!isdigit(p)){f|=p=='-';p=getchar();}
	while(isdigit(p)){a=(a<<3)+(a<<1)+(p^48);p=getchar();}
	return f?-a:a;
}
void prime_pre(){
	memset(vis,1,sizeof(vis)); 
	vis[1]=1;
	for(ll i=2;i<=m1;i++){
		if(vis[i])
			prime[cnt++]=i;
		for(ll j=1;j<cnt&&i*prime[j]<=m1;j++){
			vis[i*prime[j]]=0;
			if(i%prime[j]==0)break;
		}
	}
}
void decom_m1(){
	ll index=1;
	while(m1!=1&&index<cnt){
		ll p=prime[index];
		if(m1%p==0){
			dnum[cnt1][0]=p;
			while(m1%p==0){
				m1/=p;
				dnum[cnt1][1]++;
			}
			dnum[cnt1][1]*=m2;
			cnt1++;
		}
		index++;
	}
}
void decom_cell(ll x){
	memset(dnum_x,0,sizeof(dnum_x));
	ll index=1;
	while(x!=1&&index<cnt){
		ll p=prime[index];
		if(x%p==0){
			dnum_x[p][0]=1;
			while(x%p==0){
				x/=p;
				dnum_x[p][1]++;
			}
		}
		index++;
	}
}
void pre(){
	n=read();m1=read();m2=read();
	if(m1==1){
		cout<<0;
		exit(0);
	}
	prime_pre();
	decom_m1();
}
int main(){
	//freopen("P1069_2.in","r",stdin);
	//freopen("my.out","w",stdout);	 
	pre();
	bool flag=1;
	ll maxn=0,ans=0x3f3f3f3f;
	while(n--){
		bool f=0;
		cell=read();
		maxn=0;
		decom_cell(cell);
		for(ll i=1;i<cnt1;i++){
			ll d=dnum[i][0];
			if(dnum_x[d][0]!=1){
				f=1;
				break;
			}
			maxn=max(maxn,(ll)ceil(dnum[i][1]*1.0/dnum_x[d][1]*1.0));
		}
		if(!f)flag=0;
		ans=min(ans,maxn);
	}
	if(flag){
		puts("-1");
		return 0;
	}
	printf("%lld",ans);
	return 0;
} 
2024/10/7 10:55
加载中...