Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
30830 | 李羽乔 | 【S】T1 | C++ | 通过 | 100 | 884 MS | 59876 KB | 1189 | 2024-07-30 19:02:06 |
#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; }