比赛 |
2025暑期集训第2场 |
评测结果 |
AAAAAAAATT |
题目名称 |
整数合并 |
最终得分 |
80 |
用户昵称 |
pcx |
运行时间 |
2.871 s |
代码语言 |
C++ |
内存使用 |
3.82 MiB |
提交时间 |
2025-06-29 16:09:58 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int f[N],a,b,p;
bool v[N],vis[N];
void init(int n,int m){
for(int i=n;i<=m;i++) f[i]=i;
return;
}
int get(int x){
if(f[x]==x) return x;
else return f[x]=get(f[x]);
}
void merge(int x,int y){
int fx=get(x),fy=get(y);
if(fx!=fy) f[fy]=fx;
return;
}
void prime(int n){
for(int i=2;i<=n;++i) v[i]=1;
for(int i=2;i<=n;++i){
if(!v[i])continue;
for(int j=i;j<=n/i;++j){
v[i*j]=0;
}
}
}
int main(){
freopen("setb.in","r",stdin);
freopen("setb.out","w",stdout);
prime(50000);
cin>>a>>b>>p;
init(a,b);
int ans=0;if(p==1)p++;
for(int i=p;i<=b;i++){
if(v[i]){
int first=0;
for(int j=a;j<=b;j++){
if(j%i==0){
if(first==0){
first=j;
}else{
f[get(j)]=get(first);
}
}
}
}
}
for(int i=a;i<=b;i++){
int x=get(i);
if(!vis[x]){
vis[x]=1;
ans++;
}
}
cout<<ans;
return 0;
}