#include int main() { int N; scanf("%d", &N); std::vector isPrime(N + 1, true); std::vector primeList; isPrime[0] = isPrime[1] = false; for (int64_t i{2}; i <= N; i++) { if (!isPrime[i]) continue; primeList.push_back(i); for (int64_t j{2 * i}; j <= N; j += i) isPrime[j] = false; } int64_t count{}; for (int p_i{}; p_i < (int)primeList.size(); p_i++) for (int r_i{}; r_i < (int)primeList.size(); r_i++) { int64_t q{primeList[r_i] * primeList[r_i] - primeList[p_i]}; if (2 <= q && q <= N && isPrime[q]) count++; } printf("%lld\n", count); return 0; }