Go: package main

// https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%A9%E3%83%88%E3%82%B9%E3%83%86%E3%83%8D%E3%82%B9%E3%81%AE%E7%AF%A9

import (
	"bufio"
	"fmt"
	"math"
	"os"
	"strconv"
)

var scanner = bufio.NewScanner(os.Stdin)

func nextString() string {
	scanner.Scan()
	return scanner.Text()
}

func nextInt() (int, error) {
	return strconv.Atoi(nextString())
}

func main() {
	scanner.Split(bufio.ScanWords)

	for {
		n, err := nextInt()
		if err != nil {
			break
		}
		maybePrime := make([]bool, n+1)
		for i := 0; i <= n; i++ {
			maybePrime[i] = true
		}

		maybePrime[0] = false
		maybePrime[1] = false
		for i := 2; i <= int(math.Sqrt(float64(n)))+1; i++ {
			j := i * 2
			for j <= n {
				maybePrime[j] = false
				j += i
			}
		}

		nPrimes := 0
		for _, p := range maybePrime {
			if p {
				nPrimes++
			}
		}
		// fmt.Println(maybePrime)
		fmt.Println(nPrimes)
	}
}

C++: #include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <cstring>
#include <climits>
#include <cmath>
#include <cfloat>

#define FOR(i,b,n) for(int i=b;i<n;i++)
#define CLR(mat) memset(mat, 0, sizeof(mat))
#define INF 1<<25
#define LIM 1000000

using namespace std;

int n,sum,out;
bool prm[1000000];

void eucprime()
{
	FOR(i, 2, LIM)
	{
		if(prm[i] == 0)
		{
			for( int j = 2; j*i < LIM; j++)
			{
				prm[i*j] = 1;
			}
		}
	}
}
	

int main()
{
	while( cin >> n, !cin.eof())
	{
		CLR(prm);
		prm[0] = 1; prm[1] = 1;
		eucprime();
		
		int cnt=0;
		
		FOR(i, 0, n+1)
		{
			if(prm[i] == 0)
				cnt++;
		}
		
		cout << cnt << endl;
	}
	
	return 0;
}

C++: #include <stdio.h>
const int MAX_V = 1000000;
int prime[MAX_V + 1];
int sum[MAX_V + 1] = {0};
int main() {
  int i, k, v, n, max = 0;
  for(i = 2; i <= MAX_V; i++) {
    prime[i] = 1;
  }
  for(i = 2; i*i <= MAX_V; i++) {
    if(prime[i]){
      for(k = 2 * i; k <= MAX_V; k += i) {
        prime[k] = 0;
      }
    }
    sum[i] = prime[i - 1] + sum[i - 1];
  }
  while(scanf("%d", &n) != EOF){
    printf("%d\n", sum[i + 1]);
  }
  return 0;
}

C++: #include <iostream>
#include <iomanip>
#include <cmath>


using namespace std;
#define MAX_NUM 999999


int do_count(bool *isPrime, int n);

int main(){
  int n;
  bool flag = false;
  int numPrime[MAX_NUM];
  int pivot = 1;
  
  for(int i=0;i<MAX_NUM;i++){
    numPrime[i] = 0;
  }
  
  while(cin >> n){
    int cnt=0;
    if(n < pivot){
      //      cout << "n < pivot" << endl;
      cnt = numPrime[n];
      cout << cnt << endl;
      continue;
      
    }
    
    if(n >= pivot){
      //      cout << "n >= pivot" << endl;
    // i???????????????
    }
    
    for(int i=pivot+1;i<=n;i++){
      flag = false;
      //?´???°?????????????????§??????
      for(int j=2;j<=sqrt(i);j++){
	if(i%j==0){
	  flag = true;
	  break;
	}
      }
      if(flag){
	numPrime[i] = numPrime[i-1];
	continue;
      }else{
	numPrime[i] = numPrime[i-1] + 1;
      }
    }
    cnt = numPrime[n];
    cout << cnt << endl;
  }
}

int do_count(bool *isPrime, int n){
  int cnt=0;
  for(int i=0;i<=n;i++){
    if(isPrime[i]==true){
      cnt++;
    }
  }
  return cnt;
}

C++: #include <stdio.h>

const int MAX_V = 1000000;
int prime[MAX_V+1];
int a[MAX_V] = {'0'};
int sum[MAX_V+1];
int main() {
  int i, k, v, j, m, n;
  for(i = 2; i <= MAX_V; i++) {
    prime[i] = 1;
  }
  for(i = 2; i*i <= MAX_V; i++) {
    if(prime[i]) {
      for(k = 2 * i; k <= MAX_V; k += i) {
        prime[k] = 0;
      }
    }
  }
  sum[0] = 0;
  for(m = 0; m < MAX_V; m++) {
    sum[m+1] = sum[m] + prime[m];
  }
  while( scanf( "%d", &n ) != EOF ) {
    printf( "%d\n", sum[n+1] );
  }
  return 0;
}

C++: #include<stdio.h>

int main(){
	
	static int prime[999999 + 1];
	
	int i, j, k = 0, limit;
	
	for(i = 2; i < 1000000; i++){
		prime[i] = 1;
	}
	
	prime[0] = prime[1] = 0;
	
	for (i = 2; i < 1000000; i++){
		if(prime[i]){
			for (j = i + i; i < 1000000; j += i){
				prime[j] = 0;
			}
		}
	}
	while(scanf("%d", &limit) != EOF){
		for(i = 2; i <= limit; i++){
		
			if(prime[i]){
				k++;
			}
		}
	
		printf("%d\n", k);
	
	}
	return 0;
	
}

C++: #include<iostream>
#include<cmath>
using namespace std;
int main()
{
	int n,sum,i,k,sqrtm;
	while(cin>>n)
	{
		sum=3;
		if(n<2){cout<<0<<endl;continue;}
		if(n==2){cout<<1<<endl;continue;}
		if(n==3){cout<<2<<endl;continue;}
		if(n==5 || n==4){cout<<3<<endl;continue;}
		 i=6;
	 while(i<n)
		{
			i++;
			if(i%2==0)continue;
			if(i%3==0)continue;
			if(i%5==0)continue;
			sqrtm=sqrt(i);
			for(k=2;k<=sqrtm+1;k++)
			{if(i%k==0)break;}
			if(k==sqrtm+2)sum++;
		}
		cout<<sum<<endl;
	}
}

C++: #include <cstdio>
int d[1000000],c[1000000];
int main() {
	int i,j,r=0,n;
	for(i=2;i<500000;i++) {
		if(d[i]){c[i]=r;continue;}
		c[i]=++r;
		for(j=i*2;j<=999999;j+=i)d[j]=1;
	}
	while(scanf("%d",&n)!=EOF) {
		printf("%d\n",d[n]);
	}
}

C++: #include <stdio.h>
int main(void){
	int k,j,a;
	char flag[1000000]={1,1};//0,1は除外する
	for(k=2;k<1000;k++){
		if(flag[k]==0){
			for(j=k*k;j<1000000;j+=k)
				flag[j]=1;
		}
	}
	while(~scanf("%d",&a)){
		k=0;
		for(j=2;j<=a;j++) if(flag[j]==0) k++;
		printf("%d\n",k);
	}
}

C++: // IncludingFiles
#include<iostream>
#include<vector>
#include<math.h>

// Defines
#define     MAX_NUMBER     (999999)
#define     MIN_NUMBER     (1)

// Using Namespace
using namespace std;

// Function
int main(){
	vector <int> PrimeNumbers;
	vector <int> input;
	vector <int> output;
	int i,buf,maxn,sz,root;
	bool flag = true;
	int a,b,m,n;

	// 入力
	while(cin >> buf){
		// 入力値のチェック
		if((buf < ((int)(MIN_NUMBER))) || (buf > ((int)(MAX_NUMBER)))){
			cerr << "InputError!!" << endl;
			return -1;
		}
		// 入力値をリストに追加
		input.push_back(buf);
	}

	// n の最大値を求めて maxn に代入
	sz = (int)input.size();
	maxn = input[0];
	for(i=1;i<sz;i++){
		if(maxn < input[i]){
			maxn = input[i];
		}
	}

	// 素数2 を 素数表PrimeNumbers に追加
	PrimeNumbers.push_back(2);

	// 3 から maxn までの整数が素数かどうかを調べ、素数であれば 素数表PrimeNumbers に追加
	for(i=3;i<=maxn;i+=2){
		// root に i の平方根を代入
		root = (int)sqrt(i);
		// sz に 素数表PrimeNumbers の大きさを代入
		sz = (int)PrimeNumbers.size();
		// i が 素数表PrimeNumbers に含まれている素数で割り切れないかを確認
		for(buf=0;buf<sz;buf++){
			if(PrimeNumbers[buf] > root){				// 平方根より大きいならば
				break;						// 内側のforループから抜ける
			}else if((i % PrimeNumbers[buf]) == 0){			// もし割り切れたら
				flag = false;					// flag を戻して
				break;						// 内側のforループから抜ける
			}
		}
		// flag が立っている (すなわち i は素数である) ならば i を 素数表PrimeNumbers に追加
		if(flag == true){
			PrimeNumbers.push_back(i);
		}
		// flag を元の状態に戻す (立てる)
		flag = true;
	}

	// n 以下の素数の個数を計測
	sz = (int)input.size();
	for(i=0;i<sz;i++){
		// a および flag の初期化
		a = 0;
		flag = false;

		// b の初期化
		b = (int)PrimeNumbers.size();

		// PrimeNumbers の最大値 <= input[i] となっていないかどうかを調べる
		if(PrimeNumbers[b-1] <= input[i]){
			n = b - 1;
			flag = true;
		}

		// 二分検索
		while (flag == false){
			m = (a + b) / 2;
			if(PrimeNumbers[m] > input[i]){
				b = m;
			}else if((PrimeNumbers[m] <= input[i]) && (PrimeNumbers[m+1] > input[i])){
				n = m;
				flag = true;
			}else if(PrimeNumbers[m] < input[i]){
				a = m;
			}else{
				cerr << "BinarySearchError!!" << endl << endl;
				cerr << "PrimeNumbers[" << m << "] = " << PrimeNumbers[m] << endl;
				cerr << "PrimeNumbers[" << (m + 1) << "] = " << PrimeNumbers[m+1] << endl;
				cerr << "input[" << i << "] = " << input[i] << endl;
				return -1;
			}
		}

		// 出力値をリストに追加
		output.push_back(n + 1);
	}

	// 出力
	sz = (int)output.size();
	for(i=0;i<sz;i++){
		cout << output[i] << endl;
	}

	return 0;
}