Problem:
C: 素数

問題

ある日、素数が大好きなそすうさ君は $p + q$ が素数となるペア $(p, q)$ で遊んでいた。
そすうさ君は突然、このペアのうち、 $p$ と $q$ がともに $N$ 以下の素数であるペアがいくつあるか気になりだした。
そすうさ君に代わって個数を求めよ。

制約

入力値は全て整数である。

$1 \leq N \leq 10^7$

入力形式

入力は以下の形式で与えられる。

$N$

出力

ペアの個数を出力せよ。また、末尾に改行も出力せよ。

サンプル

サンプル入力 1

3

サンプル出力 1

2

ペアは $(2, 3), (3, 2)$ の二つである。

サンプル入力 2

20

サンプル出力 2

8

Solution in C++14 (judge verdict: Accepted)

#include<bits/stdc++.h>
#define X first
#define Y second
#define pb push_back
#define eb pb
#define rep(X,Y) for(int X=0;X<(Y);++X)
#define reps(X,O,Y) for(int X=O;X<(Y);++X)
#define all(X) (X).begin(),(X).end()

using namespace std;
using ll=long long;

const int N=11234567;
int prime[N];

int main(){
	fill(prime,prime+N,1);
	prime[0]=prime[1]=0;
	rep(i,N)if(prime[i])for(int j=i+i;j<N;j+=i) prime[j]=0;
	// rep(i,10) cout<<prime[i];cout<<endl;
	int n;
	cin>>n;
	if(n<=2){ cout<<0<<endl; return 0;}
	int re=0;
	reps(i,3,n+1)if(prime[i] && prime[i+2]) ++re;
	cout<<re*2<<endl;
}