[Haskell-cafe] A tale of Project Euler
Kalman Noel
kalman.noel at bluebottle.com
Wed Nov 28 07:12:28 EST 2007
Sebastian Sylvan:
> primes :: [Integer]
> primes = 2 : filter (null . primeFactors) [3,5..]
>
> primeFactors :: Integer-> [Integer]
> primeFactors n = factor n primes
> where
> factor m (p:ps) | p*p > m = []
> | m `mod` p == 0 = p : factor (m `div` p) (p:ps)
> | otherwise = factor m ps
Your definition gives a strange meaning to primeFactors. I'd want that for all
n, product (primeFactors n) == n. I think this law holds for the code posted
by Olivier. Of course I'd beautify his definition slightly by writing
primes = 2 : filter isPrime [3,5..]
isPrime = null . drop 1 . primeFactors
primeFactors n | n >= 2 = factor primes n
factor pr@(p:ps) n
| p*p > n = [n]
| r == 0 = p : factor pr q
| otherwise = factor ps n
where (q,r) = quotRem n p
Kalman
----------------------------------------------------------------------
Get a free email account with anti spam protection.
http://www.bluebottle.com/tag/2
More information about the Haskell-Cafe
mailing list