社区讨论

谁能帮我代交一下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 条回复,欢迎继续交流。

正在加载回复...