#include <bits/stdc++.h>
using namespace std;
const long long maxn = 3e5 + 5, mod = 1e9 + 7, inf = 1e18 + 7;
long long n;
bool mrk[maxn];
vector<long long> prm[maxn];
set<long long> s[maxn];
int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  for (long long i = 2; i < maxn; i++) {
    if (mrk[i]) continue;
    for (long long j = i; j < maxn; j += i) {
      mrk[j] = 1ll;
      prm[j].push_back(i);
    }
    mrk[i] = 0;
  }
  cin >> n;
  vector<pair<long long, long long> > vec;
  for (long long i = 2; i <= n; i++) {
    for (long long j : prm[i]) s[j].insert(i);
  }
  for (long long i = n; i > 1; i--) {
    if (mrk[i]) continue;
    if (i + i > n) continue;
    if ((s[i].size() % 2) == 1) s[i].erase(i + i);
    while (s[i].size() > 1) {
      long long x = *s[i].begin();
      s[i].erase(x);
      long long y = *s[i].begin();
      s[i].erase(y);
      for (long long j : prm[x]) s[j].erase(x);
      for (long long j : prm[y]) s[j].erase(y);
      vec.push_back({x, y});
    }
  }
  cout << vec.size() << endl;
  for (pair<long long, long long> i : vec)
    cout << i.first << ' ' << i.second << "\n";
}
