社区讨论
谁能帮我代交一下ABC445E
学术版参与者 2已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @mlmdr0a3
- 此快照首次捕获于
- 2026/02/14 21:56 5 天前
- 此快照最后确认于
- 2026/02/18 19:10 17 小时前
卡人机验证15分钟了过不去,违规自删
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
const int P=998244353;
int m=0;
int fp(int x,int y,int p){
int ans=1,base=x,tmp=y;
while(tmp){
if(tmp&1ll){
ans=(ans*base)%p;
}
base=(base*base)%p;
tmp>>=1ll;
}
return ans;
}
vector<int>v;
bool f[10000005];
void ol(int n){
for(int i=2;i<=n;i++){
if(!f[i]){
v.push_back(i);
m++;
}
for(int j=0;j<v.size()&&i*v.at(j)<=n;j++){
f[i*v.at(j)]=1;
if(i%v.at(j)==0){
break;
}
}
}
}
int inv(int x){
return fp(x,P-2,P);
}
int a[200005];
vector<int>ys;
void fenjie(int x){
ys.clear();
for(int i=0;v.at(i)<=sqrt(x);i++){
while(x%v.at(i)==0){
ys.push_back(v.at(i));
x/=v.at(i);
}
}
if(x){
ys.push_back(x);
}
}
vector<int>pos[200005];
int mx[10000005],mx2[10000005],mxid[10000005],RES=1;
signed main(){
ol(10000000);
int t;
cin>>t;
while(t--){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
fenjie(a[i]);
int cnt=0;
for(int j=0;j<ys.size();j++){
cnt++;
if(j==ys.size()-1||ys.at(j+1)!=ys.at(j)){
if(cnt>mx[ys.at(j)]){
mx2[ys.at(j)]=mx[ys.at(j)];
mx[ys.at(j)]=cnt;
mxid[ys.at(j)]=i;
}
else if(cnt>mx2[ys.at(j)]){
mx2[ys.at(j)]=cnt;
}
cnt=0;
}
}
}
for(int i=0;i<m;i++){
RES*=fp(v.at(i),mx[v.at(i)],P);
RES%=P;
pos[mxid[v.at(i)]].push_back(v.at(i));
}
for(int i=1;i<=n;i++){
int TMP=RES;
for(int j=0;j<pos[i].size();j++){
int xxx=pos[i].at(j);
TMP*=inv(fp(xxx,mx[xxx],P));
TMP%=P;
TMP*=fp(xxx,mx2[xxx],P);
TMP%=P;
}
cout<<TMP<<" ";
}
cout<<"\n";
for(int i=1;i<=n;i++){
a[i]=0;
}
for(int i=0;i<m;i++){
mx[v.at(i)]=mx2[v.at(i)]=mxid[v.at(i)]=0;
}
RES=1;
ys.clear();
for(int i=1;i<=n;i++){
pos[i].clear();
}
}
return 0;
}
回复
共 6 条回复,欢迎继续交流。
正在加载回复...