import std.stdio;
import std.math;
import std.container;
import std.string;
import std.conv;

void main()
{
    foreach(line; stdin.byLine)
        line.chomp.to!int.sieve.length.writeln;
}

 ///エラトステネスの篩にかけて、素数リストを返します。
T[] sieve(T)(T End)
in{assert(End>0);}
body{
	Array!bool b;
	b.length = End;
	T[] prime = [2,3];//素数リスト
	T SQRTEND = cast(T)sqrt(cast(real)End);
	T n = 2;
	T limit,cnt=0,pmax=5;
	while(n <= SQRTEND){		//リストのsqrtまで素数判定する
		for(T i=n*2;i<End;i+=n)
			b[i] = true;
		//素数リストを更新
		limit = n^^2;
		for(;pmax<limit;pmax+=2)
			if(!b[pmax])prime ~= pmax;
		++cnt;
		n = prime[cast(size_t)cnt];
	}
	for(T i=pmax;i<=End;i+=2)
		if(!b[i])prime ~= i;
	return prime;
}