T两个点
#include<bits/stdc++.h>
#define int long long
#define R register
using namespace std;
int a,b,p;
const int N = 1e5 + 10;
int plist[2 * N],fa[2 * N],sum[2 * N];
int pcnt = 0,num = 0;
set<int> q;
bool not_prime[2 * N];
inline int gcd(int x,int y){
if(y == 0) return x;
else return gcd(y,x%y);
}
inline void prime(){
for(R int a = 2;a <= N / 2;a++){
if(not_prime[a] == false) plist[++pcnt] = a,q.insert(a);
for(R int b = 1;b <= pcnt;b++){
int x = a * plist[b];
not_prime[x] = true;
if(x > N / 2) break;
if(a % plist[b] == 0) break;
}
}
}
inline void init(){
for(R int i = 1;i <= N / 2 ;i++)
fa[i] = i,sum[i] = 1;
}
inline int get(int x){
if(x == fa[x]) return x;
return fa[x] = get(fa[x]);
}
inline void memge(int x,int y){
int xx = get(x),yy = get(y);
fa[xx] = yy;
sum[yy] += sum[xx];
}
//void out(){
// for(int i = a;i <= b;i++){
// cout<<sum[get(i)]<<" ";
// }
// cout <<endl;
//}
signed main(){
scanf("%d%d%d",&a,&b,&p);
prime();
init();
for(R int i = a;i < b;i++){
for(R int j = a + 1;j <= b;j++){
int aa = get(i),bb = get(j),g = gcd(i,j);
if(aa != bb && g >= p && q.count(g) != 0){
{
memge(i,j);
// out();
//cout<<i <<" " << j<<endl;
}
}
}
}
// num = b - a + 1;
for(R int i = a;i <= b;i++){
int aa = get(i);
if(sum[aa] >= 1) num ++;
//cout <<sum[aa] <<endl;
sum[aa] = 0;
}
printf("%d",num);
return 0;
}