#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6+10;
int n,a,b,p;
int vis[N],pri[N],cnt;
int acc[N];
int find(int x)
{
if(x!=acc[x]) acc[x] = find(acc[x]);
return acc[x];
}
void init(int x)
{
for(int i=2;i<=x;i++)
{
if(vis[i]==0) pri[++cnt] = i;
for(int j=1;pri[j]*i<=x;j++)
{
vis[pri[j]*i] = 1;
if(i%pri[j]==0) break;
}
}
}
signed main()
{
init(1e5+5);
cin>>a>>b>>p;
for(int i=a;i<=b;i++) acc[i] = i;
for(int i=1;i<=cnt;i++)
{
if(pri[i]<p) continue;
vector<int > v;
for(int j=1;;j++)
{
int x = pri[i]*j;
if(x>b) break;
if(x>=a&&x<=b) v.push_back(x);
}
for(int j=1;j<v.size();j++)
{
int a1 = v[0],b1 = v[j];
int t1 = find(a1),t2 = find(b1);
if(t1!=t2) acc[t1] = t2;
}
}
int sum = 0;
for(int i=a;i<=b;i++) if(i==find(i)) sum++;
cout<<sum;
}
洛谷P1621集合
于 2024-07-31 10:31:03 首次发布