#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
int isnp[MAXN], n;
bool hasc[MAXN];
vector<int> g;
vector<pair<int, int> > ans;
void init() {
  for (int i = 2; i <= n / 2; i++) {
    if (!isnp[i]) {
      for (int j = i * 2; j <= n; j += i) isnp[j] = 1;
    }
  }
}
int main(int argc, char* argv[]) {
  cin >> n;
  init();
  for (int i = n / 2; i > 1; i--) {
    if (isnp[i]) continue;
    g.clear();
    for (int j = i; j <= n; j += i)
      if (!hasc[j]) g.push_back(j);
    if (g.size() & 1) swap(g[1], g[g.size() - 1]);
    for (int j = 0; j < g.size() - 1; j += 2) {
      ans.push_back({g[j], g[j + 1]});
      hasc[g[j]] = hasc[g[j + 1]] = 1;
    }
  }
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); i++)
    cout << ans[i].first << " " << ans[i].second << endl;
  return 0;
}
