提交时间:2024-07-30 19:02:06

运行 ID: 30830

#include<bits/stdc++.h> using namespace std; const int N = 1e6+10,md=998244353; #define int long long int t,n,c,a[N],isprime[N],prime[N],minn[N]; set<int> s; vector<pair<int,int> > G[N]; signed main(){ for(int i=2;i<=N-10;i++){ if(!isprime[i]){ prime[++c]=i; minn[i]=i; } for(int j=1;j<=c;j++){ if(i*prime[j]>(N-10)) break; isprime[i*prime[j]]=1; minn[i*prime[j]]=min(minn[i],prime[j]); if(i%prime[j]==0) break; } } cin>>t; while(t--){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; while(a[i]!=1){ int y=minn[a[i]],tmp=0,w=1; while(a[i]%y==0){ tmp++; w=w*y; a[i]/=y; } G[y].push_back(make_pair(tmp,w)); s.emplace(y); } } for(auto i:s){ sort(G[i].begin(),G[i].end()); } int ans=0; for(int i=1;i<=n;i++){ int tmp=1; for(auto it=s.begin();it!=s.end();){ tmp=(tmp%md*G[*it].back().second%md)%md; G[*it].pop_back(); if(G[*it].size()==0){ it=s.erase(it); } else it++; } ans=(ans%md+tmp%md)%md; } cout<<ans<<endl; } return 0; }