这道题是不是数据欺骗a QwQ
查看原帖
这道题是不是数据欺骗a QwQ
590482
HarryLinner楼主2022/11/8 22:18

代码里面 3e4+10 改成 3e5+10 就过了,要不然 Runtime Error. Received signal 8: Floating-point exception.

#include<bits/stdc++.h>

using namespace std;

const int N = 3e4+10  ;
const long long INF = 1e18 ;

int m1,m2,n;
int primes[N],tot;
bool vis[N];
struct E{
	int p,q;
}have[N],aim[N];
int hcnt,acnt;
int st[N];

void init(){
	for(int i=2;i<=N-10;i++){
		if(!vis[i]){
			primes[++tot]=i;
		}
		for(int j=1;primes[j]*i<=N-10;j++){
			vis[i*primes[j]]=1;
			if(i%primes[j]==0){
				break;
			}
		}
	}
}

void make(E r[],int &cnt,int a1,int a2){
	for(int i=1;primes[i]<=a1/primes[i] and i<=tot;i++){
		int p=primes[i];
		if(a1%p==0){
			int sum=0;
			while(a1%p==0){
				sum++;
				a1/=p;
			}
			r[++cnt]={p,sum*a2};
		}
	}
	if(a1!=1){
		r[++cnt]={a1,a2};
	}
}


int main(){
//	freopen("P1069_2.in","r",stdin);
	cin>>n;
	cin>>m1>>m2;
	if(m1==1){
		cout<<0;
		return 0;
	}
	init();
	make(aim,acnt,m1,m2);
	long long ans=INF;
	while(n--){
		int t;
		cin>>t;
		hcnt=0;
		make(have,hcnt,t,1);
		memset(st,0,sizeof st);
		for(int i=1;i<=hcnt;i++){
			if(have[i].p>N-10){
				break;
			}
			st[have[i].p]=have[i].q;
		}
		int res=1,flag=1;
		for(int i=1;i<=acnt;i++){
			int q=aim[i].q;
			int psq=st[aim[i].p];
			if(!psq){
				flag=0;
				break;
			}
			res=max(res,q/psq+((q%psq)!=0));
		}
		if(flag){
			ans=min(ans,res*1LL);
		}
	}
	cout<<(ans==INF?-1:ans);
 	return 0;
}

2022/11/8 22:18
加载中...