def problem6(n):
    """ Return the difference between square of sum of first n natural and sum
    of squares of first n natural numbers.
    >>> problem6(10)
    2640
    >>> problem6(100)
    25164150
    """
    sum_numbers = lib.sum_frist_N_numbers(n)
    sum_squres = lib.sum_squares_first_N_numbers(n)
    return (sum_numbers*sum_numbers) - sum_squres
def problem12(n):
    """ return first triangle number to have over n divisors. 
        where triangle number is the sum of first natural numbers.
    >>> problem12(500)
    76576500
    >>> problem12(5)
    28
    """
    divisors, count  = 1, 1
    while divisors < n:
        count += 1
        triangle = lib.sum_frist_N_numbers(count)
        primes_dict = lib.prime_factors(triangle)
        divisors = lib.product(map(lib.increment, primes_dict.values()))
    return triangle