defmodule Squares do @moduledoc """ Calculate sum of squares, square of sum, difference between two sums from 1 to a given end number. """ @doc """ Calculate sum of squares from 1 to a given end number. """ @spec sum_of_squares(pos_integer) :: pos_integer def sum_of_squares(number) do div(number * (number + 1) * (2 * number + 1), 6) end @doc """ Calculate square of sum from 1 to a given end number. """ @spec square_of_sum(pos_integer) :: pos_integer def square_of_sum(number) do div(number * (number + 1), 2) ** 2 end @doc """ Calculate difference between sum of squares and square of sum from 1 to a given end number. """ @spec difference(pos_integer) :: pos_integer def difference(number) do abs(square_of_sum(number) - sum_of_squares(number)) end end