P1069 细胞分裂
很简单的一个东西
除了我吧%写成了/之后
思路:如果如此,那么\(m1^{m2}\)中的每一个质因数一定比s中在最后一天的时候的指数大
就用这个做
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define int long long
using namespace std;
int n;
int mz,my;
int s[54000];
int su[54001];
int p;
int vis[54001];
int prime[54001];
int pr[54001];
int num[54001];
int pp;
int x;
void div(){
for(int i=2;i<=45000;++i){
if(!vis[i]){
prime[++p]=i;
for(int j=i+i;j<=45000;j+=i){
vis[j]=1;
}
}
}
for(int i=1;i<=p;++i){
vis[i]=0;
while(mz%prime[i]==0){
if(vis[i]==0){
vis[i]=1;
pr[++pp]=prime[i];
}
num[pp]++;
mz/=prime[i];
}
}
}
int ans;
int Ai;
int res;
bool deal(int now){
int numm;
res=-1;
for(int i=1;i<=pp;++i){
if(now<pr[i])
return 0;
numm=0;
if(now%pr[i]==0){
while(now%pr[i]==0){
numm++;
now/=pr[i];
}
if(numm>=num[i]){
res=max((long long)1,res);
}
if(num[i]*my%numm==0)
res=max(res,num[i]*my/numm);
else
res=max(res,num[i]*my/numm+1);
}else{
return 0;
}
}
return 1;
}
signed main(){
scanf("%lld",&n);
scanf("%lld%lld",&mz,&my);
ans=20000000000000;
if(mz==1){
cout<<0<<endl;
return 0;
}
div();
for(int i=1;i<=n;++i){
scanf("%lld",&x);
if(deal(x)){
ans=min(ans,res);
}
}
if(ans==20000000000000){
cout<<-1;
}else{
cout<<ans<<endl;
}
return 0;
}