OI萌新40分求调(其他测试点均WA)
查看原帖
OI萌新40分求调(其他测试点均WA)
1031191
Zhang_Wenfu楼主2024/7/26 18:18
#include <bits/stdc++.h>
using namespace std;
int n,m1,m2;
long long cnt,t,tt,len,res,r,ans=1000000000,s[100005],a[3000005],b[3000005];
bool flag=0,flag1=0;

int main(){
	cin >> n >> m1 >> m2;
	for (int i = 0;i < n;i++) cin >> s[i];
	for (int j = 0;j < n;j++){
		t=m1;flag=0;len=0;
		for (int i = 2;i <= t/i;i++){
			if (t%i == 0){
				if (s[j]%i){
					flag=1;
					break;
				}cnt=0;
				while (t%i == 0){t /= i;cnt++;}
				a[len]=cnt*m2;
				cnt=0;tt=s[j];
				while (tt%i == 0){tt /= i;cnt++;}
				b[len]=cnt;
				len++;
			}
		}if (t > 1 && s[j]%t) flag=1;
		else if (t > 1){
			a[len]=m2;
			cnt=0;tt=s[j];
			while (tt%t == 0){tt /= t;cnt++;}
			b[len]=cnt;
			len++;
		}
		if (flag) continue;
		else{
			flag1=1;res=0;
			for (int i = 0;i < len;i++){
				if (b[i] >= a[i]) continue;
				r=0;
				while (b[i] < a[i]){
					r++;
					b[i] *= 2;
				}res=fmax(res,r+1);
			}
			ans=fmin(ans,res);
		}
	}
	if (!flag1) cout << -1;
	else cout << ans;
	return 0;
}
2024/7/26 18:18
加载中...