题解!!!!
2024-03-14 13:22:24
发布于:广东
38阅读
0回复
0点赞
不回复几点睡的三姑夫i护肤hiuof恒大华府idif欧迪芬(激动)
想了一天一夜才做出来的
下面是代码
#include <iostream>
#include <cstdio>
#include <memory.h>
using namespace std;
int a[100005], sg[30005], xibao[30005];//
int main(){
int n, m1, m2;
cin >> n >> m1 >> m2;
if(m1 == 1){
cout << 0;//特判,如果m1是1,不会经历下面的过程,直接输出-1,与题意不符
return 0;
}
for(int i = 1; i <= n; i++) cin >> a[i];
for(int i = 2; i <= m1; i++){//分解质因数
while(m1 % i == 0){
sg[i]++;
m1 /= i;
}sg[i] *= m2;//根据7年级数学:(a^b)^c = a^(bc),(ab)^c = a^c*b^c,看得懂的都重开了(
}int mn = 1145141919;
for(int i = 1; i <= n; i++){
memset(xibao, 0, sizeof(xibao));//清空数组好习惯
int mx = 0;
for(int j = 2; j <= 30000; j++){
while(a[i] % j == 0){//分解质因数
xibao[j]++;
a[i] /= j;
}if(!xibao[j] && sg[j]){//如果试管里面有质因数j而细胞每次分列的个数没有,那无论分裂多少次都没用
mx = 1145141919;
break;
}else if(!xibao[j]) continue;//都没有就跳过
int ct = sg[j] / xibao[j];
if(sg[j] % xibao[j]) ct++;//计算单看这个质因数要分裂多少次
mx = max(ct, mx);//计算分列最小次数
}mn = min(mn, mx);
}if(mn == 1145141919) cout << -1;//如果一个都没有,输出-1
else cout << mn;
return 0;
}
这里空空如也
有帮助,赞一个