求条,WAon2,4,6,9,10.玄关
查看原帖
求条,WAon2,4,6,9,10.玄关
889917
limingyuan333楼主2024/8/1 17:47
#include<bits/stdc++.h>
#include<vector>
#define int long long
#define for(i,l,n) for(long long i=l;i<=n;i++)
using namespace std;
int n,s;
int m1,m2;
int gcd(int x,int y){
	if(y%x==0) return x;
	return gcd(y,x%y);
}
int lcm(int x,int y){
	return (long long)x*y/gcd(x,y);
}

bool pd(int x){
	for(i,2,sqrt(x)){
		if(x%i==0)	return 0;
	} 
	return 1;
}
int ans[100010],cnt;
int t[100010],q[100100];
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(NULL),cout.tie(NULL); 
	cin>>n;
	cin>>m1>>m2;
	int k=m1;
	for(i,2,360351){
		if(pd(i))	ans[++cnt]=i;
	}
	int bbase=1;
	while(k!=1){
		while(k%ans[bbase]==0)	t[ans[bbase]]+=m2,k/=ans[bbase];
		bbase++;
	}
	if(m1==1){
		cout<<0;return 0;
	}
	int maxn=1e18;
	for(i,1,n){
		cin>>s;	
		if(gcd(s,m1)!=1){
			int num=0;
			int base=1;
			bool flag=0;
			while(s!=1){
				while(s%ans[base]==0)	q[ans[base]]++,s/=ans[base];					
					base++;
				
			//	if(base>bbase)	break;
			}
				for(k,1,bbase){	
					if(q[ans[k]]==0&&t[ans[k]]!=0){
							flag=1;break;
					}
					else{
						if(t[ans[k]]!=0){
							num=max(num,t[ans[k]]/q[ans[k]]+bool(t[ans[k]]%q[ans[k]]));
						}
					}
				}	
			//	if(i==1)	cout<<'\n';
				if(flag){
					num=1e18;break;
				}	
		//	cout<<num<<" "; 
			for(j,1,bbase)	q[ans[j]]=0;
			maxn=min(maxn,num);
		}
	}
	if(maxn==1e18)
		cout<<-1;
	else	cout<<maxn;
	return 0;
} 
2024/8/1 17:47
加载中...