比赛 |
2025暑期集训第2场 |
评测结果 |
AAAAAAAAAA |
题目名称 |
整数合并 |
最终得分 |
100 |
用户昵称 |
左清源 |
运行时间 |
0.051 s |
代码语言 |
C++ |
内存使用 |
4.08 MiB |
提交时间 |
2025-06-29 14:20:58 |
显示代码纯文本
#include <iostream>
#include <cstdio>
using namespace std;
const int N=1e5+10;
int f[N],l,r,p,vis[N],ans;
int found(int x){
return f[x]==x?x:f[x]=found(f[x]);
}
void merge(int x,int y){
x=found(x),y=found(y);
if(x!=y)f[x]=y;return;
}
int main(){
freopen("setb.in","r",stdin);
freopen("setb.out","w",stdout);
scanf("%d %d %d",&l,&r,&p);
for(int i=l;i<=r;i++)f[i]=i;
for(int i=2;i<=r;i++){
if(!vis[i]){
int st=0;
for(int j=i;j<=r;j+=i){
vis[j]=1;
if(i>=p&&j>=l){
if(!st)st=j;
if(j!=st)merge(st,j);
}
}
}
}
for(int i=l;i<=r;i++)if(found(i)==i)ans++;
printf("%d",ans);
return 0;
}