#include <iostream>  
#include <stdio.h>  
#include <math.h>  
#include <string.h>  
  
using namespace std;  
  
const int N = 1e6;  
const int SQRTN = ceil(sqrt((double) N));  
bool isPrime[N];  
int prefixsum[N];  
  
// Eratosthenes筛选法  
void esieve(void)  
{  
    memset(isPrime, true, sizeof(isPrime));  
  
    isPrime[0] = isPrime[1] = false;  
    for(int i=2; i<=SQRTN; i++) {  
        if(isPrime[i]) {  
            for(int j=i*i; j<=N; j+=i)  //筛选  
                isPrime[j] = false;  
        }  
    }  
}  
  
void maketable()  
{  
    prefixsum[0] = 0;  
    for(int i = 1; i <= N; i++)  
        prefixsum[i] = isPrime[i] ? prefixsum[i - 1] + 1 : prefixsum[i - 1];  
}  
  
int main()  
{  
    esieve();  
  
    maketable();  
  
    int n;  
    while(~scanf("%d", &n))  
        printf("%d\n", prefixsum[n]);  
  
    return 0;  
}  

