提交时间:2024-07-30 13:01:58
运行 ID: 30736
#include <bits/stdc++.h> using namespace std; #define int long long #define endl "\n" #define pii pair<int,int> #define p1(x) x.first #define p2(x) x.second int n; int a[1000300]; map<int,int>d[1000300]; bitset<1000300>p; vector<int>P; vector<int>W[1000300]; inline void init(){ p.set(); p[1]=0; for(int i=2;i<=1e6;i++){ if(p[i]) d[i][i]=1,P.push_back(i); for(int x:P){ if(x*i>1e6)break; p[x*i]=0; d[x*i]=d[i]; d[x*i][x]++; if(i%x==0)break; } } // for(pii e:d[24]) // cout<<p1(e)<<" "<<p2(e)<<endl; } int res[1000300]; const int M=998244353; inline int qp(int a,int x){ int res=1; while(x){ if(x&1)res=res*a%M; a=a*a%M; x>>=1; } return res; } inline bool cmp(int x,int y){return x>y;} signed main(){ ios::sync_with_stdio(0); // freopen("inequality.in","r",stdin); // freopen("inequality.out","w",stdout); init(); int t; cin>>t; int C=clock(); while(t--){ cin>>n; set<int>S; for(int i=1;i<=n;i++){ cin>>a[i],res[i-1]=1; for(pii e:d[a[i]]){ S.insert(p1(e)); W[p1(e)].push_back(p2(e)); } } for(int x:S){ sort(W[x].begin(),W[x].end(),cmp); int k=W[x].size(); for(int i=0;i<k;i++) res[i]=res[i]*qp(x,W[x][i])%M; W[x].clear(); } int r=0; for(int i=0;i<n;i++) r=(res[i]+r)%M; cout<<r<<endl; } // cerr<<(clock()-C)*1000/CLOCKS_PER_SEC<<endl; fflush(stdout); cout.flush(); return 0; }