#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int p[N];
vector<pair<long long, long long> > ans;
void matching(vector<int> &v) {
  for (int i = 0; i + 1 < v.size(); i += 2) {
    ans.emplace_back(v[i], v[i + 1]);
  }
}
int main() {
  ios::sync_with_stdio(false);
  int n;
  cin >> n;
  fill(p, p + n + 1, 1);
  vector<int> even;
  for (int i = 3; i <= n / 2; i += 2) {
    if (p[i]) {
      vector<int> cand = {i};
      for (int j = i * 3; j <= n; j += i)
        if (p[j]) p[j] = 0, cand.push_back(j);
      if (cand.size() & 1) p[i * 2] = 0, cand.push_back(i * 2);
      matching(cand);
    }
  }
  for (int i = 2; i <= n; i += 2) {
    if (p[i]) even.push_back(i);
  }
  matching(even);
  cout << ans.size() << '\n';
  for (auto p : ans) {
    cout << p.first << ' ' << p.second << '\n';
  }
  return 0;
}
