牛顿迭代计算整数平方根let nsqrtN (x, y, a) = (div (x + (div a x))2, x, a)
let nsqrtLast (x, y, a) = abs(x-y)<=1
let nsqrtResult (x, y, a) =if (x*x<=a) then x else (x-1)
let nsqrt a = if (a<4) then 1 else nsqrtResult \$ until nsqrtLast nsqrtN (1, a, a)
let divisors n = Data.List.sort \$ (\(x, y)->x ++ y) \$ unzip [(x, div n x)|x<-, mod n x == 0]