I decided to write a function `divisorSum`

that sums up the divisors of the number. For example, divide 1, 2, 3 and 6 6 equally as follows:

$$ sigma (6) = 1 + 2 + 3 + 6 = 12 $$

I decided to use Euler's repeat relationship to calculate the sum of the divisors:

$$ sigma (n) = sigma (n-1) + sigma (n-2) – sigma (n-5) – sigma (n-7) + sigma (n-12) + sigma (n-15) + ldots $$

i.e.

$$ sigma (n) = sum_ {i in mathbb Z_0} (-1) ^ {i + 1} left ( sigma (n – tfrac {3i ^ 2-i} {2}) + delta (n, tfrac {3i ^ 2-i} {2}) n right) $$

(See here for the details). Therefore I decided to export some other useful features like `nthPentagonal`

which returns the nth (generalized) pentagonal number. I have created a new project with `re-stack`

and modified these two files:

```
Module Lib
(NthPentagonal,
pentagonal,
divisorSum,
) from where
- | Generates one [generalized pentagonal integer]
- | (https://en.wikipedia.org/wiki/Pentagonal_number_theorem) integer.
nthPentagonal :: Integer -> Integer
nthPentagonal n = n * (3 * n - 1) `div` 2
- | Generate a rotten list of all pentagonal numbers.
Pentagonal :: [Integer]
Pentagonals = map nthPentagonal IntegerStream
- | Provides a stream to represent an intersection of naturals to integers
- | i.e. [1, -1, 2, -2, ... ],
integerStream :: [Integer]
integerStream = map integerOrdering [1 .. ]
from where
integerOrdering :: Integer -> Integer
integerOrdering n
| n "rem" 2 == 0 = (n "div" 2) * (-1)
| otherwise = (n `div` 2) + 1
- | Using the Euler formula for the divisor function, we see this summand
- | switches between two positive and two negative. This provides a stream
- | of 1 1 -1 -1 1 1 1 ... ... to evaluate this property.
additiveStream :: [Integer]
additiveStream = map summandSign [0 .. ]
from where
summandSign :: integer -> integer
summandSign n
| n "rem" 4> = 2 = -1
| otherwise = 1
- | Kronkecker delta, return 0 if the integers are not equal, otherwise
- | Returns the value of the integer.
Delta :: Integer -> Integer -> Integer
Delta n i
| n == i = n
| otherwise = 0
- | Calculate the sum of the dividers.
- | Uses Euler's Repeat Formula:
- | $ sigma (n) = sigma (n - 1) + sigma (n - 2) - sigma (n - 5) ldots $
- | See [here](https://math.stackexchange.com/a/22744/15140) for more information
- | voltage.
divisorSum :: Integer -> Integer
divisorSum n
| n <= 0 = 0
| otherwise = sum $ takeWhile (/= 0)
(zipWith (+)
(divisorStream n)
(markPentagonal n))
where
pentDual :: Integer -> [Integer]
pentDual n =[N-x|x[N-x|x[n-x|x[n-x|x<- pentagonals]
divisorStream :: Integer -> [Integer]
divisorStream n = zipWith (*)
(map divisorSum (pentDual n))
additive stream
markPentagonal :: Integer -> [Integer]
markPentagonal n = zipWith (*)
(zipWith (delta)
pentagonal
(to repeat))
additive stream
```

```
Module home where
Import Lib
main :: IO ()
main = putStrLn $ show $ divisorSum 8
```