#include <bits/stdc++.h>
using namespace std;
bool prime[123456], use[123456];
int n;
vector<pair<int, int> > ans;
void init() {
  memset(prime, true, sizeof(prime));
  for (int i = 2; i < 123456; i++)
    if (prime[i])
      for (int j = 2 * i; j < 123456; j += i) prime[j] = false;
  cin >> n;
}
void solve() {
  for (int i = n / 2; i >= 2; i--) {
    if (!prime[i]) continue;
    vector<int> res;
    for (int j = i; j <= n; j += i)
      if (!use[j]) res.push_back(j);
    if (res.size() % 2) {
      swap(res[1], res.back());
      res.pop_back();
    }
    for (int j = 0; j < res.size(); j += 2) {
      ans.push_back(make_pair(res[j], res[j + 1]));
      use[res[j]] = true;
      use[res[j + 1]] = true;
    }
  }
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); i++)
    cout << ans[i].first << ' ' << ans[i].second << endl;
}
int main() {
  init();
  solve();
}
