#include<stdio.h>  
#include<math.h>
  
int main(void)
{  
	//入力変数
    int n = 0;  
	//素数判定flag
    bool isPrime = true;
	//素数カウント変数
    int count = 0;  
	//素数格納配列
    int prime[100000];  
	//ループの最高回数
	int imax = 0;
  
    while(scanf("%d", &n) != EOF) 
	{  
        count = 0;  
  
		//2は特別扱い
		if (n >= 2)
		{
	        prime[0] = 2;  
			count++;
		}

		//2の倍数はいらない
        for(int j = 3; j <= n; j += 2) 
		{  
			//素数かそうでないかの判断をするflag
			isPrime = true;  
  
			//平方根を求める
			imax = sqrt(double(j));

			//ここでエラトステネスのふるいで使った平方根の考え方を利用
            for(int i = 0; prime[i] <= imax; i++)
			{  
                if(j % prime[i] == 0)
				{  
                    isPrime = false;  
                    break;  
				}  
			}

			//素数だった場合
		    if(isPrime == true) 
			{  
				prime[count++] = j;  
			}  
		}  
  
		printf("%d\n", count);  
  
    }  
  
    return 0;  
}  