def f(n,memo) if memo[n]!=0 return memo[n] end if n==0 return 1 else return f(n/3,memo)+f(n/5,memo) end end def g(memo,n) if n<=1000000 return memo[n] else return g(memo,n/3)+g(memo,n/5) end end memo=[0]*1000001 1000001.times{|i| memo[i]=f(i,memo) } puts g(memo,gets.to_i)