复杂度相关
查看原帖
复杂度相关
578932
AlphaGuo楼主2022/7/1 16:58

求助:这个程序是不是复杂度有问题,,考虑的质因数上限设置到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);
}
2022/7/1 16:58
加载中...