RE求助玄关
  • 板块P9836 种树
  • 楼主Haoyue_06432
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/14 14:13
  • 上次更新2023/11/14 14:15:57
查看原帖
RE求助玄关
665772
Haoyue_06432楼主2023/11/14 14:13
#include<bits/stdc++.h>
#define ll long long
#define maxn 1000005
#define inf 1e18
#define mod 998244353
using namespace std;
ll n,w,p[maxn],sum[50000][2000],z[maxn],k,x,ans=1,num,wz;
bool bj[maxn];
int main()
{
	scanf("%lld%lld",&n,&w);bj[1]=true;
	for(int i=2;i<=1e4;i++)
	{
		if(!bj[i])
		{
			z[++k]=i;
			for(int j=i+i;j<=1e4;j+=i)
			{
				bj[j]=true;
			}			
		}
	}
	for(int i=1;i<=n;i++)
	{
		cin>>p[i];x=p[i];
		for(int j=1;z[j]<=x;j++)
		{
			while(x%z[j]==0)
			{
				sum[i][j]++;
				x/=z[j];
			}
		}
	}
	for(int i=1;i<=k;i++)
	{
		while(w%z[i]==0)
		{
			num=inf;
			for(int j=1;j<=n;j++)
			{
				if(sum[j][i]<num)
				{
					num=sum[j][i];
					wz=j;
				}
			}
			sum[wz][i]++;
			w/=z[i];
		}
		if(w==1)break;
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=k;j++)ans=(ans*(sum[i][j]+1))%mod;
	}
	cout<<ans;
	return 0;
}
/*
wide=1+a+b+c+ab+ac+bc+abc+...设a为未知数 
wide=(a+1)(b+1)...(x+1)
10000内质数1229个 
*/
2023/11/14 14:13
加载中...