#include using namespace std; #define fst(t) std::get<0>(t) #define snd(t) std::get<1>(t) #define thd(t) std::get<2>(t) #define unless(p) if(!(p)) #define until(p) while(!(p)) using ll = long long; using P = std::tuple; const int dx[8] = {-1, 1, 0, 0, -1, -1, 1, 1}, dy[8] = {0, 0, -1, 1, -1, 1, -1, 1}; stack st; ll dp[1001001]; int main(){ std::cin.tie(nullptr); std::ios::sync_with_stdio(false); dp[0] = 1; for(int i=1;i<=1000000;++i){ dp[i] = dp[i / 3] + dp[i / 5]; } ll N; std::cin >> N; if(N == 0){ std::cout << 1 << std::endl; return 0; } st.emplace(N); ll res = 0ll; while(!st.empty()){ ll n = st.top(); st.pop(); if(n / 3 > 1000000){ st.emplace(n / 3); }else{ res += dp[n / 3]; } if(n / 5 > 1000000){ st.emplace(n / 5); }else{ res += dp[n / 5]; } } std::cout << res << std::endl; }