20TLE求助
查看原帖
20TLE求助
397982
Deuteron楼主2021/7/18 16:26
#include<iostream>
//#include<cmath>
#include<cstring>
using namespace std;
const int N=1e6+5;
int n;
int m1,m2;
int q[N],c[N];
int q2[N],c2[N];
int mx;
int cr=0;
int fj(int n){
	int k=n;
	for(int i=2;i*i<=n;i++){
		//cout<<i<<endl;
		if(n%i==0){
			//cout<<i<<endl;
			mx=max(mx,i);
			q[i]=1;
			while(k%i==0){
				c[i]++;
				k/=i;
			}
		}
	}
	if(k>1){
		q[k]=1;
		c[k]++;
		mx=k;
	}
}
int main(){
	cin>>n;
	cin>>m1>>m2;
	//cout<<m1<<endl;
	if(m1==1){
		cout<<0;
		return 0;
	}
	fj(m1);
	for(int i=1;i<=m1;i++){
		c[i]*=m2;
	}
	for(int i=2;i<=mx;i++){
		//cout<<c[i]<<endl;
	}
	memcpy(c2,c,sizeof(c));
	memcpy(q2,q,sizeof(q));
	int ans=1e9;
	memset(c,0,sizeof(c));
	for(int i=1;i<=n;i++){
		int s;
		cin>>s;
		fj(s);
		int y=1;
		//cout<<mx<<endl;
		while(1){
			y++;
			//cout<<mx<<endl;
			for(int i=2;i<=mx;i++){
				c[i]=c[i]/(y-1)*(y);
				//cout<<c[i]<<" ";
			}
			int flag=1;
			for(int i=1;i<=mx;i++){
				if(c[i]<c2[i]) flag=0;
			}
			if(y>mx) break;
			//cout<<y<<endl;
			if(flag){
				ans=min(ans,y);
				break;
			}
		}
	}
	if(ans>99999999) cout<<"-1"<<endl;
	else cout<<ans<<endl;
	return 0;
}

2021/7/18 16:26
加载中...