提交时间:2024-07-30 13:08:28
运行 ID: 30744
#include<bits/stdc++.h> #define jp8 push_back using namespace std; const int N=1e6+20,LG=23; int pf[N][22],it[N][22]; map<int,int> d[N]; int mp[N];bool pr[N];vector<int> p; int a[N]; int lim=1e6+10; void init(){ for(int i=2;i<=lim;i++){ if(!pr[i]) p.jp8(i),mp[i]=i; for(auto ed:p){ if(i*ed>lim) break; pr[i*ed]=1;mp[i*ed]=ed; if(i%ed==0){ break; } } } }int vis[N],mod=998244353; void slv(int num){ int n;cin>>n; for(int i=1;i<=n;i++) d[i].clear(); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++){ int la=1,cnt=0; while(a[i]>1){ //if(i<=2) cout<<mp[a[i]]<<' '; if(mp[a[i]]!=la) la=mp[a[i]],cnt=1; if(vis[la]!=num){ for(int j=1;j<=21;j++) it[la][j]=0; vis[la]=num; }it[la][cnt]++;d[it[la][cnt]][la]++; //if(i<=2) cout<<it[la][cnt]<<' '<<la<<' '<<cnt<<' '<<int(d[it[la][cnt]][la])<<endl; cnt++;a[i]/=mp[a[i]]; } }long long ans=0; for(int i=1;i<=n;i++){ int dt=1; for(map<int,int>::iterator ed=d[i].begin();ed!=d[i].end();ed++){ int fp=ed->first,sp=ed->second; //if(i<=3)cout<<fp<<' '<<sp<<endl; for(int j=1;j<=sp;j++) dt=1ll*dt*fp%mod; //if(i<=3) cout<<dt<<endl; //cout<<i<<' '<<fp<<' '<<sp<<endl; }ans=(1ll*ans+1ll*dt)%mod; } cout<<ans<<'\n'; } int main(){ //double C=clock(); init(); int t;cin>>t; for(int i=1;i<=t;i++) slv(i); //cerr<<(clock()-C)*1.0/CLOCKS_PER_SEC; return 0; }