AOJ - Problem 0009 : Prime Number

n以下の素数の個数を出力する問題です。
1は素数ではないので気をつけましょう。
素数の問題ではエラトステネスのふるいを使うことが多いです。
エラトステネスのふるいについての説明はwikipediaに詳しく載っています。
とてもわかりやすいので一度見た方がいいかもしれません。

#include <iostream>
#include <cmath>
using namespace std;
#define MAX 1000000

int main(){
	bool p[MAX+1];
	int n, ans;

	for(int i=0 ; i<=MAX ; i++){
		p[i] = (i<=1)? false : true ;
	}

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

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