
16 Feb
2014
16 Feb
'14
7:33 a.m.
write a simple function to determine the divisors of an integer.
straight simple first, let { divides n x = (mod n) x == 0 ; divisors n = filter (divides n) [1..n] } in map divisors [255,256,257]
divisors x = 1 : lower ++ upper ++ x : [] where lower = filter (\y -> mod x y == 0) [2..(ceiling . sqrt) x] upper = sort $ map (div x) lower
time-critical millions: let { divides n x = (mod n) x == 0; divisors n = let { firsthalf = filter (divides n) [ 1 .. ceiling$sqrt$fromInteger n ] } in nub ( firsthalf ++ map (div n) (reverse firsthalf) ) } in divisors 256