#include<bits/stdc++.h>
#define N 100010 
using namespace std;
int a,b,x,ans,cnt;
int fa[N],notp[N],p[N];

//路径压缩的查找算法,找出x的根 
int find(int x){
	//x的父直接指向x的根 
	return x == fa[x]?x:fa[x] = find(fa[x]);
} 

//集合合并 
void merge(int x,int y){
	int fx = find(x);
	int fy = find(y);
	if(fx != fy) fa[fx] = fy;
}

//非素数筛选 
void getprime(){
	notp[1] = 1;//1不是素数
	//筛选2~b范围内的非素数 
	for(int i = 2;i <= b;i++){
		if(notp[i]) continue; //如果i已经是非素数了
		for(int j = 2*i;j <= b;j=j+i){
			notp[j] = 1;
		} 
	} 
	
	//将大于x~b之间的素数找出来
	for(int i = x;i <= b;i++){
		if(!notp[i]){
			cnt++;
			p[cnt] = i;
		}
	} 
}

int main(){
	cin>>a>>b>>x;
	//并查集初始化
	for(int i = a;i <= b;i++) fa[i] = i;
	getprime();//筛选素数 
	
	//遍历x~b之间所有的素数 
	for(int i = 1;i <= cnt;i++){
		for(int j = 2;j * p[i] <= b;j++){
			//两个数有>=x的质因子 
			if(j * p[i] >= a && (j-1) * p[i] >= a){
				merge(j*p[i],(j-1)*p[i]);
			}
		}
	} 
	
	//看有几个集合
	for(int i = a;i <= b;i++){
		if(fa[i]==i) ans++;
	} 
	cout<<ans;
	return 0;
} 

/**************************************************************
	Problem: 1924
	User: admin
	Language: C++
	Result: Accepted
	Time:24 ms
	Memory:3244 kb
****************************************************************/