#include <bits/stdc++.h>
using namespace std;
int v[2000000];
int k;
long long calc(long long a, long long b) {
  memset(v, 0, sizeof v);
  queue<long long> q;
  q.push(b);
  while (!q.empty()) {
    long long f = q.front();
    q.pop();
    if (f == a) {
      return v[f];
    } else if (f > a) {
      continue;
    }
    for (int i = 2; i <= k; i++) {
      if (f % i != 0) continue;
      for (int j = 1; j < i; j++) {
        if (v[f + j]) continue;
        v[f + j] = v[f] + 1;
        q.push(f + j);
      }
    }
    if (v[f + 1] == 0) {
      v[f + 1] = v[f] + 1;
      q.push(f + 1);
    }
  }
}
int main() {
  long long a, b;
  scanf("%lld %lld %d", &a, &b, &k);
  long long x = b / 360360;
  a -= x * 360360;
  b -= x * 360360;
  long long d = a - b;
  d /= 360360;
  d--;
  if (d < 0) d = 0;
  long long ans = d * calc(360360, 0);
  a -= d * 360360;
  printf("%lld\n", calc(a, b) + ans);
  return 0;
}
