/***
* @author ljj@nubix.cn
* 缓存不是越大越快,也不是越小越快
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
//默认1M缓存
#define MAX_LINE 1*1024*1024
char __line[MAX_LINE+1];
char *p = NULL;
char tab[257] = {-1};
inline char * _(){
static int k = 0;
if(k == 0){
memset(tab,-1,sizeof(tab));
for(int i=0;i<10;tab['0'+i]=i,i++);
tab['-'] = tab['+'] = +1;
k++;
}
k = fread(__line,1,MAX_LINE,stdin);
if(k <= 0)
__line[0] = 1; //hack..
else
__line[k] = 0;
return p = __line;
}
/***
* 假设输入绝对正确
* @return 0 || 1
*/
inline int nextInt(int &r){
r = 0;
int m = 0;
for(p && *p && *p!=1 ? 0:_();p;_()){
for(;*p && *p!=1 && tab[*p] < 0;p++)if(m != 0){r = r * m; p++; return 1;}
if(*p != 1){
if(*p){
for((*p-'-') ? ((*p-'+') ? (m=1,p) : (m=1,p++)):(m=-1,r=0,p++);*p && tab[*p]>=0;p++)
if(tab[*p]>=0) r = r * 10 + tab[*p];
if(*p != 0 && m != 0 ){r = r * m;return 1;}
}}
if(*p!=0 && *p!=1 && m != 0){r = r * m;return 1;}
if(*p == 1)break;
}
return 0;
}
int q[1000000];
int main(int argc, char *argv[])
{
memset(q,0,sizeof(q));
int num = 0;
for(int i=2;i<1000000;i++)if(q[i] == 0){
num++;
for(int j=i;j<1000000;j+=i)
q[j] = num;
}
while(nextInt(num)){
printf("%d\n",q[num]);
}
}