社区讨论
关于at&bound
学术版参与者 4已保存回复 22
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 22 条
- 当前快照
- 1 份
- 快照标识符
- @mlmdjbq4
- 此快照首次捕获于
- 2026/02/14 21:50 5 天前
- 此快照最后确认于
- 2026/02/18 18:00 18 小时前
首先How D
然后求E
CPP然后求E
#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是大于,所以有小于吗?
然后lowerbound是大于,所以有小于吗?
回复
共 22 条回复,欢迎继续交流。
正在加载回复...