// yukicoder: No.732 3PrimeCounting // 2019.4.30 bal4u #include #include #define MAX 300005 char notPrime[MAX] = { 1,1,0,0,1 }; // zero: if prime int ptbl[26000] = { 2 }; int sz; // 25997 void sieve(int n) { int i, j, b; b = (int)sqrt((double)n); for (i = 3; i <= b; i += 2) { if (!notPrime[i]) { for (j = i * i; j <= n; j += i) notPrime[j] = 1; } } sz = 1; for (i = 3; i <= n; i += 2) { if (!notPrime[i]) ptbl[sz++] = i; } } int f[300005]; int main() { int N, i, a, b, c, d; long long ans; scanf("%d", &N); sieve(3*N); ans = 0; for (i = 3; (c = ptbl[i]) <= N; i++) { b = ptbl[i-1]; for (a = 1; a < i-1; a++) f[ptbl[a] + b]++; for (d = i+1; d < sz; d++) ans += f[ptbl[d]-c]; } printf("%lld\n", ans); return 0; }