求助:这个程序是不是复杂度有问题,,考虑的质因数上限设置到50000会TLE
#include<cstdio>
#include<cstring>
#include<climits>
#include<functional>
#define int long long
using namespace std;
const int N=30005;
int n,m1,m2,si,ans=LONG_LONG_MAX,pm[2][N];
inline void di(int num,int cur,int k)
{
for(int i=2;i<=12000&&num>1;i++)
if(num%i==0)for(;num%i==0;num/=i,pm[cur][i]+=k);
}
signed main()
{
scanf("%lld%lld%lld",&n,&m1,&m2);di(m1,0,m2);if(m1==1){printf("%lld\n",(int)0);return 0;}
for(int i=1,si=0;i<=n;i++)
{
scanf("%lld",&si);
for(int i=1;i<N;i++)pm[1][i]=0;
int now_ans{};di(si,1,1);
for(int i=2;i<=12000;i++)
if(pm[0][i])
{
if(!pm[1][i]){now_ans=0;break;}
now_ans=max(now_ans,pm[0][i]/pm[1][i]+(pm[0][i]%pm[1][i]==0?0:1));
}
if(now_ans)ans=min(now_ans,ans);
}
printf("%lld",ans==LONG_LONG_MAX?-1:ans);
}