80分,TLE两个点求助TAT
  • 板块P1621 集合
  • 楼主CQnythy2012
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/2/7 15:11
  • 上次更新2025/2/7 15:17:58
查看原帖
80分,TLE两个点求助TAT
1256176
CQnythy2012楼主2025/2/7 15:11
#include<bits/stdc++.h>
using namespace std;

int a,b,p1;
int fa[100000+10];
bool c[100000+10];
bool p[100000+10];
int z[100000+10];
void gp(int r){
	int i,j;
	for(i=2;i<=r;i++){
		if(!p[i]) z[++cnt]=i;
		for(j=1;j<=cnt && i*z[j]<=r;j++){
			p[i*z[j]]=true;
			if(i%z[j]==0) break;
		}
	}
}
int findfather(int v){
	if(fa[v]==v) return fa[v];
	else {
		fa[v]=findfather(fa[v]);
		return fa[v];
	}
}
void ma(int x,int y){
	int l=findfather(x),r=findfather(y);
	if(l!=r) fa[r]=l;
	return ;
}

int main(){
	scanf("%d%d%d",&a,&b,&p1);
	p[1]=true;
	gp(b);
	for(int i=a;i<=b;i++) fa[i]=i;
	for(int i=a;i<=b;i++){
		for(int j=i+1;j<=b;j++){
			int d=__gcd(i,j);
			if(p[d]) continue;
			if(d>=p1){
				ma(i,j);
			}
		}
	}
	int ans=0;
	for(int i=a;i<=b;i++){
		int ff=findfather(i);
		if(!c[ff]){
			ans++;
			c[ff]=true;
		}
	}
	printf("%d",ans);
	return 0;
} 

求求了QAQ

2025/2/7 15:11
加载中...