#include <bits/stdc++.h>
using namespace std;
const int64_t X = 1e9 + 7;
const int64_t inf = 1e18;
void google(int64_t i) { cout << "Case #" << i << ": "; }
void prec(double n, int64_t d) {
  cout << fixed << setprecision(d) << n << "\n";
}
int64_t prime[1000001];
void sieve(int64_t n) {
  for (int64_t i = 0; (0 <= n + 1) ? (i < n + 1) : (i >= n + 1);
       (0 <= n + 1) ? (i++) : (i--))
    prime[i] = 1;
  for (int64_t i = 2; i * i <= n; i++) {
    if (prime[i] != 1) continue;
    for (int64_t j = i * i; j <= n; j = j + i)
      if (prime[j] == 1) prime[j] = i;
  }
}
int64_t gcd(int64_t a, int64_t b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
int64_t bin(int64_t a, int64_t n, int64_t m) {
  int64_t res = 1;
  while (n) {
    if (n % 2) {
      res = (res * a) % m;
      n--;
    }
    a = (a * a) % m;
    n /= 2;
  }
  return res;
}
void dijktra(vector<pair<int64_t, int64_t>> g[], int64_t n) {
  priority_queue<pair<int64_t, int64_t>, vector<pair<int64_t, int64_t>>,
                 greater<pair<int64_t, int64_t>>>
      pq;
  vector<int64_t> dist(n, inf);
  dist[0] = 0;
  int64_t parent[n];
  memset(parent, -1, sizeof(parent));
  pq.push({0, 0});
  while (!pq.empty()) {
    pair<int64_t, int64_t> x = pq.top();
    pq.pop();
    for (int64_t i = 0; (0 <= (int64_t)g[x.second].size())
                            ? (i < (int64_t)g[x.second].size())
                            : (i >= (int64_t)g[x.second].size());
         (0 <= (int64_t)g[x.second].size()) ? (i++) : (i--)) {
      pair<int64_t, int64_t> k = g[x.second][i];
      if (dist[x.second] + k.first < dist[k.second]) {
        dist[k.second] = dist[x.second] + k.first;
        parent[k.second] = x.second;
        pq.push({dist[k.second], k.second});
      }
    }
  }
}
void bfs(int64_t s, vector<int64_t> g[], int64_t n) {
  bool vis[n];
  for (int64_t i = 0; (0 <= n) ? (i < n) : (i >= n); (0 <= n) ? (i++) : (i--))
    vis[i] = false;
  vis[s] = true;
  deque<int64_t> q;
  q.push_back(s);
  while (!q.empty()) {
    s = q.front();
    q.pop_front();
    for (int64_t i = 0; i < (int64_t)g[s].size(); i++) {
      if (!vis[g[s][i]]) {
        vis[g[s][i]] = true;
        q.push_back(g[s][i]);
      }
    }
  }
}
void dfs(int64_t u, vector<int64_t> g[], bool *vis) {
  vis[u] = true;
  for (int64_t i = 0; i < (int64_t)g[u].size(); i++)
    if (!vis[g[u][i]]) dfs(g[u][i], g, vis);
}
void create_w(vector<pair<int64_t, int64_t>> *g, int64_t m) {
  for (int64_t i = 0; (0 <= m) ? (i < m) : (i >= m); (0 <= m) ? (i++) : (i--)) {
    int64_t u, vector, w;
    cin >> u >> vector >> w;
    g[u - 1].push_back({w, vector - 1});
    g[vector - 1].push_back({w, u - 1});
  }
}
void create(vector<int64_t> *g, int64_t m) {
  for (int64_t i = 0; (0 <= m) ? (i < m) : (i >= m); (0 <= m) ? (i++) : (i--)) {
    int64_t u, vector;
    cin >> u >> vector;
    g[u - 1].push_back(vector - 1);
    g[vector - 1].push_back(u - 1);
  }
}
void contest(int64_t t) {
  int64_t r, a, b, c, d;
  cin >> r >> a >> b >> c >> d;
  double k = ceil(sqrt((c - a) * (c - a) + (d - b) * (d - b)) / (2 * r));
  cout << k << "\n";
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int64_t T = 1;
  for (int64_t t = 0; (0 <= T) ? (t < T) : (t >= T); (0 <= T) ? (t++) : (t--)) {
    contest(t);
  }
  return 0;
}
