Go: package main

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

var sc = bufio.NewScanner(os.Stdin)

func main() {
	for sc.Scan() {
		a, _ := strconv.Atoi(sc.Text())
		fmt.Println(countPrime(a))
	}
}

func countPrime(a int) int {
	primes := make([]bool, a+1)
	n := 0
	for i := 2; i <= a; i++ {
		if primes[i] == false {
			n++
			for j := i * i; j <= a; j += i {
				primes[j] = true
			}
		}
	}
	return n
}

C++: #include<bits/stdc++.h>
#include<iostream>
#define LIM 999999
using namespace std;
long long int i,j,a,odd;
bool prime[LIM];
long long int arr[999999];
void sieve()
{
    
    arr[a++]=2;
    for(i=3;i<=LIM;i+=2)
    {
        if(!prime[i])
        {
            arr[a++]=i;
            if(i*i<=LIM)
            {
                odd=i;
                
                for(j=i*i;j<=LIM;j=i*odd)
                {
                    prime[j]=true;
                    odd+=2;
                }
            }
        }
    }
}
int main()
{
    ios_base :: sync_with_stdio(false);
    cin.tie(NULL);
    sieve();
    long long int k, num, count = 0;
    k=0;
    while(scanf("%lld", &num)!=EOF)
    {
        k=0;
        count = 0;

        for(int i=1; i<=num; i++)
        {
            if(i == arr[k])
                {
                    count++;
                    k++;
                }
        }
        printf("%lld\n", count);
    }
    return 0;
}

C++: #include <iostream>

using namespace std;

int main(void) {
  int n, num, p[100000] = {};
  bool flag;
  p[0] = 2;
  while(cin >> n) {
    if(n == 1) {
      num = 0;
    } else {
      num = 1;
    }
    for(int i = 2; i < n+1; i++) {
      flag = false;
      for(int j = 0; j < num; j++) {
        if(i % p[j] == 0) {
          flag = true;
          break;
        }
      }
      if(flag == false) {
        p[num] = i;
        num++;
      }
    }
    cout << num << '\n';
  }

  return 0;
}

C++: #include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <cfloat>
#include <map>
#include <utility>
#include <set>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
#include <algorithm>
#include <functional>
#include <sstream>
#include <complex>
#include <stack>
#include <queue>
using namespace std;
static const double EPS = 1e-5;
typedef long long ll;
#define FOR(i,n) for(i=0;i<n;i++)
#define rep(i,n) for(int i=0;i<n;i++)

int p[1000010];

int main(){
	p[0]=p[1]=1;
	rep(i,1000000){
		if(p[i]==0)
			for(int j=2*i;j<1000000;j+=i)
				p[j]=1;
	}
	int n;
	for(;cin>>n;){
	int r=0;
	rep(i,n)
	if(p[i]==0)r++;
	cout<<r<<endl;
	}
	return 0;
}

C++: #include <iostream>
#include <vector>
//#include <math.h>
//#include <string>
#include <cmath>
#include <iomanip>

int main();
int count_prime_number(int n);
std::vector<int> return_prime_number(int n);

//最初に素数リストを作成し、入力された値に対してリストを参照する。
int main(){
	std::vector<int> prime_numbers;		//素数リスト
	int input;
	std::vector<int> answer;

	prime_numbers = return_prime_number(999999);
	//for (int i = 0; i < 3; i++){
	//std::cin >> input;
	while (std::cin >> input){
		//素数の探索
		for (int i = 0; i < input; i++){
			if (input == prime_numbers[i]){
				answer.push_back(i + 1);
				break;
			}
			else if (input < prime_numbers[i]){
				answer.push_back(i);
				break;
			}
			else{
				//何もしない
			}
		}
	}

	for (int i = 0; i < answer.size(); i++){
		std::cout << answer[i] << std::endl;
	}

	//while (1);
	return 0;
}


//入力のたびに素数のチェックをする
/*
int main(){
	int input;
	std::vector<int> answer;
	
	//for (int i = 0; i < 3; i++){
		//std::cin >> input;
	while (std::cin >> input){
		answer.push_back(count_prime_number(input));
	}

	for (int i = 0; i < answer.size(); i++){
		std::cout << answer[i] << std::endl;
	}

	//while (1);
	return 0;
}
*/

/**
* nまでの素数の個数を出力する
* args:数値n
* return:素数の個数
* 参考:http://tsg.ne.jp/TT/tsg/c/mansaku/P01.html
*/
int count_prime_number(int n){
	int rtn = 0;

	//2だけ個別チェック
	if (n >= 2){
		rtn++;
	}

	for (int i = 3; i <= n; i += 2)
	{
		bool is_prime_num = true;
		for (int j = 3; j <= sqrt(i); j += 2)		//ルートi以上のiの約数はルートi以下のiの約数と対になっているので範囲はルートiまででいい
		{
			if (i % j == 0)
			{
				is_prime_num = false;
				break;
			}
		}

		if (is_prime_num){
			rtn++;

			//デバッグ
			//std::cout << i << std::endl;
		}
	}

	return rtn;
}

/**
* nまでの素数を返す
* args:任意の数値n
* return:素数を格納したvector
*/
std::vector<int> return_prime_number(int n){
	std::vector<int> rtn;

	//2だけ個別チェック
	if (n >= 2){
		rtn.push_back(2);
	}

	for (int i = 3; i <= n; i += 2)
	{
		bool is_prime_num = true;
		for (int j = 3; j <= sqrt(i); j += 2)		//ルートi以上のiの約数はルートi以下のiの約数と対になっているので範囲はルートiまででいい
		{
			if (i % j == 0)
			{
				is_prime_num = false;
				break;
			}
		}

		if (is_prime_num){
			rtn.push_back(i);

			//デバッグ
			//std::cout << i << std::endl;
		}
	}

	return rtn;
}

C++: #include<iostream>
#include<cmath>
using namespace std;

//素数かどうか判定する関数
bool judge( int x )
{

    for( int i = 2; i <= sqrt(x); i++ )       //与えられた数が10なら
    {                                         //
        if( x % i == 0)
            return false;
    }

    return true;
}

int main()
{
    int n;

    while( cin >> n )                           
    {
        bool PN[n+1];                               //PrimeNumber
        int count = 0;                              //countは素数の数


        PN[0] = false;                              //0は素数ではない。
        PN[1] = false;                              //1は素数ではない。

        for( int i = 2; i <= n; i++)                //0,1以外の全ては素数候補。ここから篩にかける。 
        {
            PN[i] = true;                           //ex.100の場合、2~100を素数候補とする。
            count++;
        }

        for( int i = 2; i <= sqrt(n); i++)          //nの平方根以下の素数の倍数を消していけば、残ったものが素数となる。    
        {
            if( PN[i] == true )                     //素数ならば
            {
                 for( int j = 2; j <= n / i; j++ )  //素数の倍数を順に削除していく
                {
                    if( PN[i*j] == true )           //2*3と3*2で重複しないように
                    {
                        PN[i*j] = false;            //素数ではないことが分かった
                        count--;                    //削除
                    }
                    
                }
            }
   
        }
        cout << count << endl;
    }

    return 0;
}

C++: #include<iostream>
#include<vector>

using namespace std;

int main()
{
	int n;
	int head,fin;
	int temp;
	
	
	vector<int> isPrime;
	
	while(cin>>n)
	{
		for(int i = 0; i < n; i++){
			isPrime.push_back(1);
		}
//		cout << "Corecced!" << endl;
		isPrime[0] = isPrime[1] = 0;
		temp = 0;
		
		for(;;)
		{
			//TõXgÌæªð©Â¯é
			for(head = temp+1; head < n; head++){
				if(isPrime[head] == 1){
					break;
				}
			}
			//æªðÜÜÈ¢{ÍSÄ¬
			for(int i = head; i*head < n; i++){
				isPrime[i*head] = 0;
			}
			//TõXgÌÅãÖ
			for(fin = n; fin > 0; fin--){
				if(isPrime[fin] == 1){
					break;
				}
			}
//			printf("head:%d    fin:%d\n",head,fin);
			
			if(fin < head*head){
				break;
			}
			temp = head;
		}
		
		int cont = 0;
		for(int i = 0; i < n; i++){
			if(isPrime[i] == 1){
				cont++;
			}
		}
		printf("%d\n",cont);
	}
}

C++: #include <iostream>
#include <vector>
#include <cmath>
using namespace std;

int main(){
  int MAX = 1000000;
  int n;
  int cnt=0;
  vector<bool> num(n);
  
  for(int i=0; i<MAX; i++){
    num[i] = true;
  }
  num[0] = false;
  num[1] = false;

  for(int i=2; i<=sqrt(MAX); i++){
    if(num[i]){
      for(int j=i*2; j<MAX; j+=i){
	num[j] = false;
      }
    }
  }

  while(cin >> n){
    cnt = 0;
    for(int i=0; i<=n; i++){
      if(num[i]) cnt++;
    }
    cout << cnt << endl;
  }
  return 0;
}