比赛 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;
}