#include <bits/stdc++.h>
using namespace std;
int main() {
  int n;
  cin >> n;
  vector<vector<int>> divs(n + 1);
  for (int i = 2; i <= n; i++) {
    for (int j = 1; j * i <= n; j++) {
      divs[i * j].push_back(i);
    }
  }
  vector<int> match(n + 1), rest;
  int ind = 2;
  for (; ind * 2 <= n; ind++) {
    if (match[ind] != 0) continue;
    match[ind] = 2 * ind;
    match[2 * ind] = ind;
  }
  for (; ind <= n; ind++) {
    if (match[ind] != 0) continue;
    if (divs[ind].size() == 1) continue;
    rest.push_back(ind);
  }
  for (int j = 0; j < ((int)rest.size() - 1); j++) {
    int cur = rest[j], next = rest[j + 1];
    if (divs[cur][0] == divs[next][0]) {
      match[cur] = next;
      match[next] = cur;
      j++;
      continue;
    }
    int pr = divs[cur][0] * divs[next][0];
    if (match[pr] == 0) {
      match[cur] = pr;
      match[pr] = cur;
      continue;
    }
    if (match[pr] % divs[cur][0] == 0) {
      match[match[pr]] = cur;
      match[cur] = match[pr];
      match[pr] = next;
      match[next] = pr;
    } else {
      match[match[pr]] = next;
      match[next] = match[pr];
      match[pr] = cur;
      match[cur] = pr;
    }
    j++;
  }
  int count = 0;
  for (int i = 2; i <= n; i++)
    if (match[i] != 0) count++;
  cout << count / 2 << "\n";
  for (int i = 2; i <= n; i++) {
    if (match[i] != 0 && match[i] > i) {
      cout << i << " " << match[i] << "\n";
    }
  }
  return 0;
}
