
On Fri, 24 Aug 2007, Mirko Rahn wrote:
tm = sum . takeWhile(>0) . iterate f . f where f = flip div 5
Quite nice. I like
tm5 0 = 0 tm5 n = let q = div n 5 in q + tm5 q
This version corresponds to what I'm think when parsing |tm|, so I wrote it down directly.
Since the original poster used the message title "style", I want to mention that his solution is good style, because it keeps logical steps separated, and thus lets you inspect meaningful interim results. (iterate f . f) computes the number of natural numbers up to n with factors 5, 5^2, 5^3 and so on. Then you like to sum these up (sum), but before this, you must limit the list to a reasonable finite prefix (takeWhile (>0)). Of course, using 'show' and counting the zeros is more intuitive. It is not efficient, but it will serve as a nice test of 'tm's correctness.