86pts 求调
  • 板块P9836 种树
  • 楼主wmrqwqal & su
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/12 14:38
  • 上次更新2023/11/12 16:10:27
查看原帖
86pts 求调
820056
wmrqwqal & su楼主2023/11/12 14:38
#include<bits/stdc++.h>
using namespace std;
unsigned long long n,m,a[100010],b[100010],c[1010],k,wz,ma,s,maxn,ans=1,mod=998244353;
unsigned long long ysgs(long long x)
{
	long long sum=1;
	for(int i=2;i*i<=x;i++)
	{
		if(x%i==0)
		{
			s=1;
			while(x%i==0) 
				x/=i,s++;
			sum*=s;
		}
	}
	if(x>1) 
		sum*=2;
	return sum;
}
bool pdzs(int a)
{
    if(a==1)
        return 0;
    if(a==2)
        return 1;
    for(int i=2;i<=sqrt(a);i++)
        if(a%i==0)
            return 0;
    return 1;
}
void fjys(long long a)
{
	if(pdzs(a))
		c[++k]=a;
	else
	{
		for(int i=2;i<=a;i++)
		{
			if(a%i==0)
			{
				a/=i;
				if(a==1)
				{
					c[++k]=i;
					break;
				}
				else
					c[++k]=i;
				i=1;
			}
		}
	}
}
void dfs(long long gs)
{
	//for(int i=1;i<=5;i++)
	//{
		//cout<<a[i]<<" ";
		//cout<<endl;
	//}
	if(gs==k)
	{
		ans=1;
		for(int i=1;i<=n;i++)
			ans*=ysgs(a[i]);
		maxn=max(maxn,ans);
		return ;
	}
	for(int i=1;i<=n;i++)
	{
		a[i]*=c[gs+1];
		dfs(gs+1);
		a[i]/=c[gs+1];
	}
}
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl '\n'
#define QwQ return 0;
int main()
{
	IOS;
//	freopen("plant3.in","r",stdin);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		cin>>a[i],b[i]=ysgs(a[i]);
	if(m==1)
	{
		for(int i=1;i<=n;i++)
			ans*=b[i]%mod,ans%=mod;
		cout<<ans;
		QwQ;
	}
	else if(n<=5)
	{
		fjys(m);
	//	for(int i=1;i<=k;i++)
			//cout<<c[i]<<" ";
		dfs(0);
		cout<<maxn%mod;
		QwQ;
	}
	else
	{
		fjys(m);
		for(int j=1;j<=k;j++)
		{
			ma=0;
			for(int i=1;i<=n;i++)
				if(ysgs(a[i]*c[j])-ysgs(a[i])>ma)
					ma=ysgs(a[i]*c[j])-ysgs(a[i]),wz=i;
			a[wz]*=c[j];
		}
		for(int i=1;i<=n;i++)
			ans*=ysgs(a[i])%mod,ans%=mod;
		cout<<ans;		
	}
	QwQ;
}
2023/11/12 14:38
加载中...