求助tle了
  • 板块P1621 集合
  • 楼主20070108wxy
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/6/18 17:31
  • 上次更新2023/10/23 12:49:38
查看原帖
求助tle了
951329
20070108wxy楼主2023/6/18 17:31
#include<bits/stdc++.h>
using namespace std;
int f[100005];
int k[100005];//1代表是素数 
int ans[100005];
int find(int x)
{
	if(f[x]!=x)
	{
		return f[x]=find(f[x]);
	}
	else
	{
		return f[x];
	}
}
void hb(int x,int y)
{
	f[find(y)]=find(x);
}
int main()
{
	int a,b,p;
	cin>>a>>b>>p;
	int geshu=0;
	int gs=0;
	for(int i=2;i<=b;i++)
	{
		k[i]=1;
	}
	for(int i=2;i<=b;i++)
	{
		if(k[i]==1)
		{
			for(int j=2;j<=b/i;j++)
			{
				k[i*j]=0;
			}
		}
	}
	for(int i=p;i<=b;i++)
	{
		if(k[i]==1)
		{
			gs++;
			ans[gs]=i;
		}
	}
	for(int i=a;i<=b;i++)
	{
		f[i]=i;
	}
	for(int i=a;i<=b;i++)
	{
		for(int j=a;j<=b;j++)
		{
			for(int z=1;z<=gs;z++)
			{
				if(k[ans[z]]==1&&i!=j&&i%ans[z]==0&&j%ans[z]==0)
				{
					hb(i,j);
				}
			}
		}
	}
	for(int i=a;i<=b;i++)
	{
		if(find(i)==i)
		{
			geshu++;
		}
	}
	cout<<geshu;
}
2023/6/18 17:31
加载中...