每一个数都是 p*q p^2 p^3 p^4 的形式,分类讨论即可
#include<bits/stdc++.h> #define forn(i, n) for (int i = 0 ; i < int(n) ; i++) #define fore(i, s, t) for (int i = s ; i < (int)t ; i++) #define fi first #define se second #define all(x) x.begin(),x.end() #define pf2(x,y) printf("%d %d ",x,y) #define pf(x) printf("%d ",x) #define each(x) for(auto it:x) cout<<it<<endl; #define pii pair<int,int> #define sc(x) scanf("%d",&x) using namespace std; typedef long long ll; const int maxn=2e5+5; const int maxm=2e5+5; const int inf=1e9; const ll mod=998244353; ll a[maxn],n; long long my_sqrt(long long x) { long long l=1,r=2e9; while(l<r){ long long mid=(l+r+1)>>1; if(mid*mid<=x) l=mid; else r=mid-1; } return l; } long long my_crt(long long x) { assert(x > 0); long long y = (long long) (powl((long double) x, 1.0 / 3.0) + 0.5); while (y * y * y<x) y++; while (y * y * y>x) y--; if (y * y * y == x) { return y; } return -1; } int main() { cin>>n; for(int i=0;i<n;i++) cin>>a[i]; map<ll,vector<pair<ll,ll>>> ls; ll ans=1; map<ll,ll> eq; for(int i=0;i<n;i++){ ll t=my_sqrt(a[i]); if(t*t==a[i]) { ll k=my_sqrt(t); if(k*k*k*k==a[i]) ls[i].push_back({k,4}); else ls[i].push_back({t,2}); } else { t=my_crt(a[i]); if(t*t*t==a[i]) { ls[i].push_back({t,3}); } else { bool flag=0; for(int j=0;j<n;j++){ if(j==i || a[i] == a[j]) continue; ll g=__gcd(a[i],a[j]); if(g!=1) { ls[i].push_back({g,1}); ls[i].push_back({a[i]/g,1}); flag=1;break; } } if(!flag) { eq[a[i]]++; } } } } for(auto i:eq) if(i.se==1) ans=ans*4%mod; else ans=ans*(i.se+1)%mod*(i.se+1)%mod; map<ll,ll> ct; for(auto i:ls) for(auto j:i.se) ct[j.fi]+=j.se; for(auto i:ct) ans=ans*(i.se+1)%mod; cout<<ans<<endl; }