#include <bits/stdc++.h>
using namespace std;
int N;
int mdivisor[100000 + 1];
set<int> has[100000 + 1];
int main() {
  cin.sync_with_stdio(false);
  for (int i = 2; i <= 100000; ++i) {
    if (mdivisor[i] == 0)
      for (int j = i; j <= 100000; j += i)
        if (mdivisor[j] == 0) mdivisor[j] = i;
  }
  cin >> N;
  for (int i = 2; i <= N; ++i) has[mdivisor[i]].insert(i);
  for (int i = 3; i <= N; ++i) {
    if (i * 2 > N) break;
    if (has[i].size() % 2 == 1) {
      has[2].erase(2 * i);
      has[i].insert(2 * i);
    }
  }
  int ans = 0;
  for (int i = 2; i <= N; ++i) ans += has[i].size() / 2;
  cout << ans << endl;
  for (int i = 2; i <= N; ++i) {
    set<int>::iterator it1, it2;
    for (it1 = has[i].begin(); it1 != has[i].end(); ++it1) {
      it2 = it1;
      ++it1;
      if (it1 == has[i].end()) break;
      cout << *it1 << " " << *it2 << endl;
    }
  }
  return 0;
}
