#include #include #include using namespace std; typedef long long LL; const int N = 300010; int n, freq[N]; LL ans; bool is_prime[N]; vector primes; void EulerSieve(int x) { fill(is_prime, is_prime + N, true); is_prime[0] = is_prime[1] = false; for (int i = 2; i < x; ++i) { if (is_prime[i]) primes.push_back(i); for (auto p : primes) { if (1LL * i * p >= x) 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); scanf("%d", &n); EulerSieve(3 * n); for (int i = 2; i < primes.size() && primes[i] <= n; ++i) { int c = primes[i]; int b = primes[i - 1]; for (int j = 0; j < i - 1; ++j) { int a = primes[j]; ++freq[a + b]; } for (int j = 0; j < primes.size() && primes[j] <= 3 * c; ++j) { int sum = primes[j]; if (sum >= c) { ans += freq[sum - c]; } } } printf("%lld\n", ans); return 0; }