求条,駨窤
  • 板块P1621 集合
  • 楼主OIer_Hhy
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/5 18:56
  • 上次更新2024/8/5 19:06:08
查看原帖
求条,駨窤
681941
OIer_Hhy楼主2024/8/5 18:56
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1E5+5;
int a,b,p,vis[N],fa[N],f[N],cnt;
vector<int> prime;
int find(int u){
	return fa[u]==u?u:fa[u]=find(fa[u]); 
}
void merge(int x,int y){
	x=find(x),y=find(y);
	cout<<x<<' '<<find(x)<<' '<<y<<' '<<find(y)<<endl;
	if(x==y) return ;
	fa[y]=x;
}
void init(){
	for(int i=p;i<=b;i++){
		if(!vis[i]){
			prime.emplace_back(i);
			for(int j=2;i*j<=b;j++) vis[i*j]=1;
		}
	}
}
signed main(){
	cin>>a>>b>>p;
	init();
	for(int i=a;i<=b;i++) fa[i]=i;
	for(auto x:prime){
		int k=0;
		while(x*k<a) k++;
		while(x*(k+1)<=b){
           	merge(x*k,x*(k+1));     
            k++;
        }
	}
	for(int i=a;i<=b;i++) cnt+=(fa[i]==i);
	cout<<cnt<<endl;
	return 0;
}

2024/8/5 18:56
加载中...