#include<iostream>
#include<vector>
#include<stdio.h>
using namespace std;
 
int main(){
int n,count,m_Prime;
 
while(cin >> n){
	int count = 0;
        int j=0;
        vector <int> array;
        
        for(int i=2;i<=n;i++){                  //探査配列の代入
                array.push_back(i);
                }
        
        while(m_Prime*m_Prime < n){
                m_Prime = 0;                                                    //m_Primeの初期化（最小を見つけたら素数探査から抜け出す為
                
                for(;j<=n-2;j++){                               //最小の素数を見つける。
                        while(array[j] == 0){j++;}
                        for(int k=2;k<=array[j];k++){					
                                if(array[j]%k==0 && array[j] != k)       break;
                                if(array[j] == k)       m_Prime = array[j];
                                
                                }
                        if(m_Prime != 0)        break;
                        }
                
                
                for(int l=0;l<=n-2;l++){                                //最小素数の倍数が入っている所を0にする。ただし、その数自体は放置
                        while(array[l] < m_Prime) {     l++;}
						if(array[l] == m_Prime) array[l] = 1;
                        if(array[l] % m_Prime == 0)     array[l] = 0;
                        }
               
                
                }
        
                
        for(int m=0;m<=n-2;m++){                                        //素数のカウント
                if(array[m]!=0) count++;
                }
        
        
        cout << count << endl;                                          //出力
        }
 
 
        
return 0;
}