#include<bits/stdc++.h>
using namespace std;
const int N = 1e8;
bool vis[N];
int p[N / 10],k;
void ola()
{
for(int i = 2; i <= 1e8; i++)
{
if(vis[i] == 0) p[++k] = i; //将素数i加入素数数组p中
for(int j = 1; j <= k; j++) //扫一遍素数数组里面的k个素数
{
int num = i * p[j]; //获取一个由i和p[j]组成的合数
if(num > 1e8) break;
vis[num] = 1;
if(i % p[j] == 0) break; //发现i是p[j]倍数,避免重复标记后面数字,直接break
}
}
}
int main()
{
ola(); //ola函数调用完,可以得到一个素数数组p和素数个数k,其中p[i]:第i个素数,最后一个素数是p[k]
int n; cin >> n;
for(int i = 1; i <= k; i++){
if(p[i] > n){
cout << i - 1;
return 0;
}
}
cout << k;
return 0;
}