97pts求调
  • 板块P9836 种树
  • 楼主K_layna
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/11 20:00
  • 上次更新2023/11/11 20:17:18
查看原帖
97pts求调
298878
K_layna楼主2023/11/11 20:00
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e4+10,M=1500;
ll ans=1;
int n,m,w,a[N],prime[N],v[N];
int ve[N][M];
void primes(int x)
{
    for(int i=2;i<=x;i++)
    {
        if(!v[i])
        {
            prime[++m]=i;
            v[i]=i;
        }
        for(int j=1;j<=m;j++)
        {
            if(prime[j]>v[i]||prime[j]>x/i)
                break;
            v[i*prime[j]]=prime[j];
        }    
    }
}
int main()
{
    scanf("%d%d",&n,&w);
    primes(N);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        int b=a[i];
        for(int j=1;j<=m;j++)
        {
            if(b<prime[j])
                break;
            int g=0;
            while(b%prime[j]==0)
                b/=prime[j],g++;
            ve[i][j]=g;
        }
    }
    for(int j=1;j<=m;j++)
    {
        if(w<prime[j])
            break;
        while(w%prime[j]==0)
        {
            w/=prime[j];
            int mn=0x7f7f7f7f,mi;
            for(int i=1;i<=n;i++)
                if(mn>ve[i][j])
                    mn=ve[i][j],mi=i;
            ve[mi][j]++;
        }
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(prime[j]<=a[i])
                ans=1ll*ans*(ve[i][j]+1)%998244353;
    printf("%lld\n",ans);
    return 0;
}
2023/11/11 20:00
加载中...