#include <bits/stdc++.h>
using namespace std;
int GCD(int X, int Y) { return Y ? GCD(Y, X % Y) : X; }
long long DP(int X, int Y, int K) {
  static int DP[360360];
  DP[Y] = 0;
  for (int i = Y + 1; i <= X; i++) {
    DP[i] = DP[i - 1] + 1;
    for (int j = 3; j <= K; j++)
      if (i / j * j >= Y) DP[i] = min(DP[i], DP[i / j * j] + 1);
  }
  return DP[X];
}
int main() {
  long long A, B;
  int K;
  cin >> A >> B >> K;
  int Len = 1;
  for (int i = 2; i <= K; i++) Len = Len * i / GCD(Len, i);
  long long X = A / Len, Y = B / Len;
  if (X == Y)
    cout << DP(A % Len, B % Len, K) << endl;
  else
    cout << DP(A % Len, 0, K) + (X - Y - 1) * (DP(Len - 1, 0, K) + 1) +
                DP(Len - 1, B % Len, K) + 1
         << endl;
  return 0;
}
