40pts求助
查看原帖
40pts求助
320656
屑稻香楼主2021/2/26 14:41
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
struct node{
	long long  l[301],sum;
	map<int,int> p;
}data[30001],mdata;
long long  n,m1,m2,a[10001],ans1=2147483647;
node divide(long long  x,long long  b){
	long long  m=0;
	node ans;
	for(long long  i=2;i<=sqrt(x);i++){
		if(x%i==0){
			ans.l[++m]=i;
			while(x%i==0)x/=i,ans.p[i]++;
			ans.p[i]*=b;
		}
		if(x==1)break;
	}if(x>1)ans.p[x]=b,ans.l[++m]=x;
	ans.sum=m;
	return ans;
}
int main(){
	memset(data,0,sizeof(data));
	cin>>n>>m1>>m2;
	if(m1*m2==1){
		cout<<0;
		return 0;
	}mdata=divide(m1,m2);
	for(long long  i=1;i<=n;i++){
		cin>>a[i],data[i]=divide(a[i],1);
		long long  aa=0;
		for(long long  j=1;j<=mdata.sum;j++){
			if(data[i].p[mdata.l[j]]==0)break;
			int tt=mdata.p[mdata.l[j]]-data[i].p[mdata.l[j]];
			long long  tmp=max(0,tt);
			aa=max(aa,tmp);
		}if(aa!=0)ans1=min(aa,ans1);
	}cout<<(ans1!=2147483647?ans1+1:-1);
}

只过了1,3,6,7这4组

2021/2/26 14:41
加载中...