rt
代码 only WA on #16
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e4+3,M=14,P=998244353;
int n,w,p,num[N],cnt;
ll sum[N][M],add[N],ans=1;
bool vis[N];
int main(){
//freopen("plant1.in","r",stdin);
for(int i=2;i<N;i++){
if(!vis[i]){
for(int j=i*i;j<N;j+=i) vis[j]=true;
num[++cnt]=i;
}
}
scanf("%d%d",&n,&w);
for(int i=1;i<=n;i++){
scanf("%d",&p);
for(int j=1;num[j]<=cnt;j++){
ll u=0;
while(!(p%num[j])) p/=num[j],u++;
sum[j][u]++;
}
if(p>1) sum[lower_bound(num+1,num+cnt+1,p)-num-1][1]++;
}
for(int j=1;num[j]<=cnt;j++){
ll u=0;
while(!(w%num[j])) w/=num[j],u++;
add[j]=u;
}
if(w>1) add[lower_bound(num+1,num+cnt+1,w)-num-1]++;
for(int i=1;i<=cnt;i++){
if(add[i]){
for(int j=0;j<M;j++){
if(add[i]>sum[i][j]) add[i]-=sum[i][j],sum[i][j+1]+=sum[i][j],sum[i][j]=0;
else{
sum[i][j+1]+=add[i],sum[i][j]-=add[i];
break;
}
}
}
for(int j=0;j<M;j++){
for(int k=0;k<sum[i][j];k++){
ans=(ans*(ll)(j+1))%P;
}
}
}
printf("%lld",ans);
}