Re: count zeros in a number
- To: mathgroup at smc.vnet.net
- Subject: [mg121865] Re: count zeros in a number
- From: DrMajorBob <btreat1 at austin.rr.com>
- Date: Wed, 5 Oct 2011 04:02:11 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <201110020636.CAA28027@smc.vnet.net> <j6brvm$8om$1@smc.vnet.net>
- Reply-to: drmajorbob at yahoo.com
I'm guessing that I got zero because I ran some of the code with an undefined x. My bad! Correcting that, I find the esoteric method faster than your ancient, outmoded ones: x = 24^24*55^55; Replace[IntegerDigits@x, {__, zeroes : 0 ..} :> Length@{zeroes}] // Timing {0.000198, 55} (n = 0; While[GCD[x, 10^n] == 10^n, n++]; n - 1) // Timing {0.000417, 55} (n = 0; While[Mod[x, 10] == 0, (x = x/10; n++)]; n) // Timing {0.000228, 55} Bobby On Tue, 04 Oct 2011 15:57:30 -0500, Richard Fateman <fateman at eecs.berkeley.edu> wrote: > On 10/4/2011 9:44 AM, DrMajorBob wrote: >> There's nothing "esoteric" about IntegerDigits, Replace, or Repeated, >> as in: >> >> x = 24^24*55^55; >> Replace[IntegerDigits@x, {__, zeroes : 0 ..} :> >> Length@{zeroes}] // Timing >> >> {0.000185, 55} > > My feeling is that these ARE esoteric. A person just introduced to > Mathematica would probably not encounter IntegerDigits, Repeated, or > patterns other than the trivial one used in pseudo function definitions > as > f[x_]:= x+1. > > >> >> If we wanted brute-force arithmetic, we might use Fortran. >> >> Your suggested solutions are NOT greatly hindered by "the slow >> implementation of looping constructs in Mathematica", on the other hand: >> >> (n = 0; While[GCD[x, 10^n] == 10^n, n++]; n - 1) // Timing >> >> {0.000029, 0} > > huh? I got {0., 55}. Perhaps my computer is faster or has a lower > resolution timer, but we should both get 55. > >> >> (n = 0; While[Mod[x, 10] == 0, (x = x/10; n++)]; n) // Timing >> >> {0.000018, 0} > > I mention the slow implementation of looping constructs simply to warn > people that if you can resolve your computation by simple composition of > built-in functions e.g. F[G[H[x]]] and don't rely on Mathematica > to efficiently execute loops written as While[] For[] etc, you are > probably going to run faster. Let Mathematica's operation on compound > objects like lists do the job. Length[] is a lot faster than counting > with a While etc. > > In my timings, doing the operations 1000 times.. > Do[.....,{1000}]//Timing > > I found that my solutions were about 10X faster than the IntegerDigits > one, on this particular value of x. > > Fortran can't be used unless you manage arbitrary precision integers... > > RJF > > > -- DrMajorBob at yahoo.com
- References:
- count zeros in a number
- From: dimitris <dimmechan@yahoo.com>
- count zeros in a number