社区讨论

关于at&bound

学术版参与者 4已保存回复 22

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
22 条
当前快照
1 份
快照标识符
@mlmdjbq4
此快照首次捕获于
2026/02/14 21:50
5 天前
此快照最后确认于
2026/02/18 18:00
18 小时前
查看原帖
首先How D
然后求E
CPP
#include <bits/stdc++.h>
#define SACRIFICING using
#define THE namespace
#define ROOK std
SACRIFICING THE ROOK;
typedef long long ll;
const ll mod=998244353;
int n;
ll a[200009];
int t;
ll lcmd;
int gcmd;
bool ispr[10000009];
int pr[2000009],l;
vector<int>prs[2000009];
struct node{
	vector<pair<int,int> >s;
}b[200009];
ll qpow(ll x,ll y){
	ll res=1;
	while(y){
		if(y&1){
			res*=x;
			res%=mod;
		}
		x*=x;
		x%=mod;
		y/=2;
	}
	return res;
} 
int N=1e7;
int main(){
	for(int i=2;i<=N;i++){
		if(!ispr[i]){
			pr[++l]=i;
		}
		//else continue;
		for(int j=2;j*i<=N;j++){
			ispr[i*j]=1;
			if(j%i==0)break;
		}
	}
	cin>>t;
	while(t--){
		for(int i=1;i<=l;i++){
			while(!prs[i].empty()){
				prs[i].pop_back();
			}
		}
		cin>>n;
		lcmd=gcmd=1;
		for(int i=1;i<=n;i++){
			cin>>a[i];
			while(!b[i].s.empty()){
				b[i].s.pop_back();
			}
			int x=a[i],y=1;
			while(x>1&&y<=l){
				while(y<=l&&x%pr[y]){
					y++;
				}
                if(y>l)break;
				int ti=0;
				while(!(x%pr[y])){
					x/=pr[y];
					++ti;
				}
				prs[i].push_back(ti);
				b[i].s.push_back({y,ti});
			}
			lcmd=a[i]*lcmd/__gcd(lcmd,a[i]);
			lcmd%=mod;
		}
		for(int i=1;i<=l;i++){
			if(!prs[i].empty())sort(prs[i].begin(),prs[i].end());
		}
		for(int i=1;i<=n;i++){	
			ll x=1;		
			for(pair<int,int>cur:b[i].s){
                cout<<a[i]<<' '<<cur.first<<' '<<cur.second<<'\n';
				int d;
                auto dd=lower_bound(prs[cur.first].begin(),prs[cur.first].end(),cur.second);
                dd--;
                if(dd>=prs[cur.first].begin()){
                    d=*dd;
                }
                else{
                    d=0;
                }
				x*=qpow(pr[cur.first],cur.second-d);
			}
			cout<<lcmd/x<<' ';
		}
        puts("");
	}
	return 0;
}
给我调力竭了,跟mxCPC自己一人打了3h感觉差不多
然后lowerbound是大于,所以有小于吗?

回复

22 条回复,欢迎继续交流。

正在加载回复...