#include <bits/stdc++.h>
using namespace std;
const int N = 3000007;
vector<int> pr;
int L, R, P, NCnt;
int f[N], seq[N];
bool Ava[N];
inline void upd(int &v, int g) { v = (v < 0 ? g : min(v, g)); }
void search(int x, int j, bool Flag) {
  if (Flag) seq[NCnt++] = x;
  if (j >= pr.size()) return;
  for (long long now = 1; x * now <= R; now *= pr[j])
    search(x * now, j + 1, now > 1);
}
void preprocessing() {
  cin >> L >> R >> P;
  for (int i = 2; i < P; ++i) {
    bool isprime = 1;
    for (int j = 0; j < pr.size(); ++j) isprime &= ((i % pr[j]) > 0);
    if (isprime) pr.push_back(i);
  }
  search(1, 0, 1);
  sort(seq, seq + NCnt);
}
void solve() {
  int Res = 0;
  fill(f, f + N, -1);
  f[0] = 0;
  for (int B = 2; B < P; ++B) {
    for (int i = 0, Now = 0; i < NCnt && Now < NCnt; ++i) {
      if (f[i] < 0) continue;
      while (Now < NCnt && seq[Now] < seq[i] * B) ++Now;
      if (Now < NCnt) upd(f[Now], f[i] + 1);
    }
    for (int i = 0; i < NCnt; ++i) Ava[i] |= (f[i] >= 0 && f[i] + B <= P);
  }
  for (int i = 0; i < NCnt; ++i) Res += (Ava[i] && L <= seq[i] && seq[i] <= R);
  cout << Res << endl;
}
int main() {
  preprocessing();
  solve();
  return 0;
}
