#include #include #include using namespace std; typedef long long LL; const int N = 100010; int n; LL ans; bool is_prime[N]; vector primes; void EulerSieve() { fill(is_prime, is_prime + N, true); is_prime[0] = is_prime[1] = false; for (int i = 2; i < N; ++i) { if (is_prime[i]) primes.push_back(i); for (auto p : primes) { if (1LL * i * p >= N) continue; is_prime[i * p] = false; if (i % p == 0) { break; } } } } // 1 - 100000有9527个质数 int main() { freopen("psum.in", "r", stdin); freopen("psum.out", "w", stdout); EulerSieve(); scanf("%d", &n); for (int i = 0; i < primes.size(); ++i) { if (primes[i] > n) break; for (int j = i + 1; j < primes.size(); ++j) { if (primes[j] > n) break; for (int k = j + 1; k < primes.size(); ++k) { if (primes[k] > n) break; if (is_prime[primes[i] + primes[j] + primes[k]]) ++ans; } } } printf("%lld\n", ans); return 0; }