为什么会编译错误?
  • 板块学术版
  • 楼主W_C_B_H
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/7/3 17:55
  • 上次更新2023/10/27 21:59:12
查看原帖
为什么会编译错误?
527300
W_C_B_H楼主2022/7/3 17:55

RT,评测记录, 代码:

#include<bits/stdc++.h>
using namespace std;
#define MAXN 10005
#define MAXS 50005
//数据范围 
struct pos
{
	int val;
	int pr[MAXS];
	int big=0;
}m1,m2,s[MAXS],m;
int n,p[MAXN],ans=2147483647;
bool prime[MAXN],flag=false;
void primes(int x)	//线性筛质数 
{
	int cnt=0;
	//目前找到的质数个数 
	prime[1]=false;
	for(int i=2;i<=x;i++)
	{
		if(prime[i])
		{
			p[++cnt]=i;
			//记录质数 
			for(int j=1;j<=cnt;j++)
			{
				if(i*p[j]<MAXN-10)
				{	
					prime[i*p[j]]=false; 
				}
				else
				{
					break;
				}
			}
		}
		else
		{
			int last,j=0;
			do
			{
				if(i*p[++j]<MAXN-10)
				{	
					prime[i*p[j]]=false;
					last=p[j];
				}
				else
				{
					break;
				}
			}while(i%last && j<=cnt);
		}
	}
}
void factor(pos x)	//分解质因数 
{
	int s=x.val,cnt=0;
	while(s>=p[++cnt])
	{
		if(!(s%p[cnt]))
		{
			s/=p[cnt];
			x.pr[p[cnt]]++;
			x.big=cnt;
		}
	}
}
int main()
{
	memset(prime,true,sizeof(prime));
	primes(50000); 
	cin>>n>>m1.val>>m2.val;
	factor(m1);
	factor(m2);
	for(int i=1;i<=max(m1.big,m2.big);i++)
	{
		m.pr[i]=m1.pr[i]+m2.pr[i];
	}
	m.big=max(m1.big,m2.big);
	for(int i=1;i<=n;i++)
	{
		cin>>s[i].val;
		factor(s[i]);
	}
	for(int i=1;i<=n;i++)
	{
		if(s[i].big<m.big)
		{
			continue;
		}
		flag=true;
		int t=0;
		for(int j=1;j<=s[i].big;j++)
		{
			if(s[i].pr[j]==0 && m.pr[j]>0)
			{
				flag=false;
				break;
			}
			if(t<ceil(m.pr[j] / s[i].pr[j]))
			{
				t=ceil(m.pr[j] / s[i].pr[j]);
			}
		}
		if(!flag)
		{
			continue;
		}
		ans=min(ans,t);
	}
	if(flag)
	{
		cout<<ans;
	}
	else
	{
		cout<<"-1";
	}
	return 0;
}
2022/7/3 17:55
加载中...