#define PROBLEM "https://judge.yosupo.jp/problem/counting_primes"
#include"template/template.hpp"
#include"number-theory/prime-count.hpp"intmain(){lln;in(n);out(PrimeCount::count(n));}
#line 1 "verify/number-theory/LC_counting_primes.test.cpp"
#define PROBLEM "https://judge.yosupo.jp/problem/counting_primes"
#line 2 "template/template.hpp"
#include<bits/stdc++.h>usingnamespacestd;#line 2 "template/macro.hpp"
#define rep(i, a, b) for (int i = (a); i < (int)(b); i++)
#define rrep(i, a, b) for (int i = (int)(b) - 1; i >= (a); i--)
#define ALL(v) (v).begin(), (v).end()
#define UNIQUE(v) sort(ALL(v)), (v).erase(unique(ALL(v)), (v).end())
#define SZ(v) (int)v.size()
#define MIN(v) *min_element(ALL(v))
#define MAX(v) *max_element(ALL(v))
#define LB(v, x) int(lower_bound(ALL(v), (x)) - (v).begin())
#define UB(v, x) int(upper_bound(ALL(v), (x)) - (v).begin())
#define YN(b) cout << ((b) ? "YES" : "NO") << "\n";
#define Yn(b) cout << ((b) ? "Yes" : "No") << "\n";
#define yn(b) cout << ((b) ? "yes" : "no") << "\n";
#line 6 "template/template.hpp"
#line 2 "template/util.hpp"
usinguint=unsignedint;usingll=longlongint;usingull=unsignedlonglong;usingi128=__int128_t;usingu128=__uint128_t;template<classT,classS=T>SSUM(constvector<T>&a){returnaccumulate(ALL(a),S(0));}template<classT>inlineboolchmin(T&a,Tb){if(a>b){a=b;returntrue;}returnfalse;}template<classT>inlineboolchmax(T&a,Tb){if(a<b){a=b;returntrue;}returnfalse;}template<classT>intpopcnt(Tx){return__builtin_popcountll(x);}template<classT>inttopbit(Tx){return(x==0?-1:63-__builtin_clzll(x));}template<classT>intlowbit(Tx){return(x==0?-1:__builtin_ctzll(x));}#line 8 "template/template.hpp"
#line 2 "template/inout.hpp"
structFast{Fast(){cin.tie(nullptr);ios_base::sync_with_stdio(false);cout<<fixed<<setprecision(15);}}fast;template<classT1,classT2>istream&operator>>(istream&is,pair<T1,T2>&p){returnis>>p.first>>p.second;}template<classT1,classT2>ostream&operator<<(ostream&os,constpair<T1,T2>&p){returnos<<p.first<<" "<<p.second;}template<classT>istream&operator>>(istream&is,vector<T>&a){for(auto&v:a)is>>v;returnis;}template<classT>ostream&operator<<(ostream&os,constvector<T>&a){for(autoit=a.begin();it!=a.end();){os<<*it;if(++it!=a.end())os<<" ";}returnos;}template<classT>ostream&operator<<(ostream&os,constset<T>&st){os<<"{";for(autoit=st.begin();it!=st.end();){os<<*it;if(++it!=st.end())os<<",";}os<<"}";returnos;}template<classT1,classT2>ostream&operator<<(ostream&os,constmap<T1,T2>&mp){os<<"{";for(autoit=mp.begin();it!=mp.end();){os<<it->first<<":"<<it->second;if(++it!=mp.end())os<<",";}os<<"}";returnos;}voidin(){}template<typenameT,class...U>voidin(T&t,U&...u){cin>>t;in(u...);}voidout(){cout<<"\n";}template<typenameT,class...U,charsep=' '>voidout(constT&t,constU&...u){cout<<t;if(sizeof...(u))cout<<sep;out(u...);}#line 10 "template/template.hpp"
#line 2 "template/debug.hpp"
#ifdef LOCAL
#define debug 1
#define show(...) _show(0, #__VA_ARGS__, __VA_ARGS__)
#else
#define debug 0
#define show(...) true
#endif
template<classT>void_show(inti,Tname){cerr<<'\n';}template<classT1,classT2,class...T3>void_show(inti,constT1&a,constT2&b,constT3&...c){for(;a[i]!=','&&a[i]!='\0';i++)cerr<<a[i];cerr<<":"<<b<<" ";_show(i+1,a,c...);}#line 2 "number-theory/prime-count.hpp"
namespacePrimeCount{usingi64=int64_t;staticinlinei64div(i64a,i64b){returndouble(a)/b;}#define FUNC() \
vector<i64> xs{0}; \
for (i64 i = N; i > 0; i = div(N, div(N, i) + 1)) xs.push_back(i); \
vector<i64> cnt(xs); \
for (auto &x : cnt) --x; \
for (i64 x = 2, sq = sqrtl(N), xsz = xs.size(); x <= sq; ++x) { \
if (cnt[xsz - x] == cnt[xsz - x + 1]) continue; \
i64 x2 = x * x, pi = cnt[xsz - x + 1]; \
for (i64 i = 1, n = xs[i]; i < xsz && n >= x2; n = xs[++i]) \
cnt[i] -= cnt[i * x <= sq ? i * x : xsz - div(n, x)] - pi; \
}
pair<vector<i64>,vector<i64>>table(i64N){FUNC()return{xs,cnt};}i64count(i64N){if(N<2)return0;FUNC()returncnt[1];}#undef FUNC
};// namespace PrimeCount/**
* @brief 素数カウント
* @docs docs/number-theory/prime-count.md
*/#line 5 "verify/number-theory/LC_counting_primes.test.cpp"
intmain(){lln;in(n);out(PrimeCount::count(n));}