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