On Thu, 12 Aug 2004, Remi Turk wrote: > On Thu, Aug 12, 2004 at 09:01:03PM +0200, Henning Thielemann wrote: > > > > On Thu, 12 Aug 2004, Remi Turk wrote: > > > I usually (each time I urgently need to calculate primes ;)) use > > > a simple intSqrt = floor . sqrt . fromIntegral > > > (which will indeed give wrong answers for big numbers) > > > > If I urgently need factors of an integer I check "factor*factor > n" > > rather than "factor > intSqrt n". :-] > > but you'll have to (^2) once every "iteration". > The following code only has to sqrt once.
Right. Hm, but if you get a 'div' for free for every 'mod' (e.g. divMod) you could also check "factor > n `div` factor" > Oh, the joy of premature optimization. Or even premature coding ;) > > -- Will lie when given stupid questions > isPrime 1 = False > isPrime 2 = True > isPrime n = not $ any (n`isDivBy`) (2:[3,5..intSqrt n]) > where > n `isDivBy` d = n `rem` d == 0 > intSqrt = floor . sqrt . fromIntegral If the numbers become too big, will 'fromIntegral' round down or up? If it rounds down, then intSqrt might lead to a too small result. _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe
