Evil Bro wrote:
> 
> > Counting can be done elegantly by 'filter' and 'length':
> I figured out the following code after posting:
> 
> solve d = length [(y,x) | x <- [2..d], y <- [1..(x-1)], gcd x y == 1]
> main = print (solve 1000000)
> 
> However when running it, it gave an answer of -1255316543. How on earth can
> a length be negative?

Yu got an integer overflow - length returns an Int. You can use
Data.List.genericLength  instead, however, which can return its
result in any Num instance. (In particular, Integer works)

> import Data.List
> 
> solve :: Integer -> Integer
> solve d = genericLength [(y,x) | x <- [2..d], y <- [1..(x-1)], gcd x y == 1]
> 
> main = print (solve 1000000)

(Note: untested.)

HTH,

Bertram
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to