分解质因数一定要看好写了while!!!
11分:
#include<bits/stdc++.h>
using namespace std;
bool vis[10009];
long long q[10009];
long long inn;
void init(){
vis[1]=1;
for(long long i=2;i<=10000;i++){
if(!vis[i]){
q[++inn]=i;
}
for(long long j=1;j<=inn&&q[j]*i<=10000;j++){
vis[q[j]*i]=1;
if(i%q[j]==0){
break;
}
}
}
}
long long n,w;
map<long long,long long> f[10009];
long long aa[10009];
void st(long long x){
long long d;
d=1;
for(long long i=1;i<=n;i++){
if(f[i][x]<f[d][x]){
d=i;
}
}
f[d][x]++;
aa[d]*=x;
}
int main(){
init();
cin>>n>>w;
for(long long i=1;i<=n;i++){
long long a;
cin>>a;
aa[i]=a;
for(long long j=2;j<=sqrt(a);j++){
while(a%j==0){
f[i][j]++;
a/=j;
}
}
if(a!=1){
f[i][a]++;
}
}
for(long long i=2;i<=sqrt(w);i++){
while(w%i==0){
st(i);
w/=i;
}
}
if(w!=1){
st(w);
}
long long ans;
ans=1;
for(long long i=1;i<=n;i++){
for(long long j=2;j<=sqrt(aa[i]);j++){
if(aa[i]%j==0){
ans*=(f[i][j]+1);
ans%=998244353;
aa[i]/=j;
}
}
if(aa[i]!=1){
ans*=f[i][aa[i]]+1;
ans%=998244353;
}
}
cout<<ans;
return 0;
}
100分:
#include<bits/stdc++.h>
using namespace std;
bool vis[10009];
long long q[10009];
long long inn;
void init(){
vis[1]=1;
for(long long i=2;i<=10000;i++){
if(!vis[i]){
q[++inn]=i;
}
for(long long j=1;j<=inn&&q[j]*i<=10000;j++){
vis[q[j]*i]=1;
if(i%q[j]==0){
break;
}
}
}
}
long long n,w;
map<long long,long long> f[10009];
long long aa[10009];
void st(long long x){
long long d;
d=1;
for(long long i=1;i<=n;i++){
if(f[i][x]<f[d][x]){
d=i;
}
}
f[d][x]++;
aa[d]*=x;
}
int main(){
init();
cin>>n>>w;
for(long long i=1;i<=n;i++){
long long a;
cin>>a;
aa[i]=a;
for(long long j=2;j<=sqrt(a);j++){
while(a%j==0){
f[i][j]++;
a/=j;
}
}
if(a!=1){
f[i][a]++;
}
}
for(long long i=2;i<=sqrt(w);i++){
while(w%i==0){
st(i);
w/=i;
}
}
if(w!=1){
st(w);
}
long long ans;
ans=1;
for(long long i=1;i<=n;i++){
for(long long j=2;j<=sqrt(aa[i]);j++){
if(aa[i]%j==0){
ans*=(f[i][j]+1);
ans%=998244353;
while(aa[i]%j==0)
aa[i]/=j;
}
}
if(aa[i]!=1){
ans*=f[i][aa[i]]+1;
ans%=998244353;
}
}
cout<<ans;
return 0;
}