求助
  • 板块P1621 集合
  • 楼主lraM41
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/4/1 20:17
  • 上次更新2023/10/23 19:43:56
查看原帖
求助
824865
lraM41楼主2023/4/1 20:17

WA,90pts

求助大佬帮助qwq

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,m,fa[N],x,y,size[N],z,p[N],P,cnt,s,v[N];
int find(int x)
{
   if(x==fa[x])return x;
   return fa[x]=find(fa[x]);
}
void join(int x,int y)
{
   int f1=find(x),f2=find(y);
   if(f1!=f2){
      if(size[f1]<size[f2])
         swap(f1,f2);
      fa[f2]=f1;
      size[f1]+=size[f2];
   }
}
int main()
{
   cin>>n>>m>>P;
   for(int i=2;i<=m;i++)
	{
    	if(!v[i])p[cnt++]=i;
    	for(int j=0;j<cnt&&i*p[j]<=m;j++)
    	{
        	v[i*p[j]]=i;
        	if(i%p[j]==0)break;
    	}
   }
   for(int i=n;i<=m;i++)fa[i]=i;
   for(int i=1;i<=cnt;i++){
      if(p[i]>=P){
         for(int k=(n+p[i]-1)/p[i]*p[i];k<=m;k+=p[i])
            join((n+p[i]-1)/p[i]*p[i],k); 
      }
   }
   for(int i=n;i<=m;i++)
      if(fa[i]==i) s++;
   cout<<s; 
	return 0;
}
2023/4/1 20:17
加载中...