Нужна функия суммы делителей натур. числа. Вместо обычного
sumDivisors n = sum [ k | k <- [1..(n `div` 2)], n `mod` k == 0 ]
uint sumDivisors(uint n)
{
uint m = (uint)sqrt(n);
uint k = 2, sum = 1, tmp;
for (; k <= m; ++k)
if (!(n % k)) {
sum += k;
if (k != (tmp = n/k))
sum += tmp;
}
return sum;
}
sumDivisors n = 1 + sum' [ k + m | k <- [2..sq],
n `mod` k == 0,
let t = n `div` k
m = if t /= k then t else 0 ] where
sq = floor . sqrt . fromIntegral $ n