def calc_v2(n):
    '''
    ' the sequence of triangle number is:
    ' 1 * (1 + 1) / 2, 2 * (2 + 1) / 2, 3 * (3 + 1) / 2, 4 * (4 + 1) / 2, 5 * (5 + 1) / 2, ...,
    ' i * (i + 1) / 2, (i + 1) * (i + 2) / 2, ...
    '
    ' or in this form:
    ' 1 * 1, 1 * 3, 3 * 2, 2 * 5, 5 * 3, ...
    '
    ' or:
    ' (2 * 1 - 1) * 1, 1 * (2 * 1 + 1), (2 * 2 - 1) * 2, 2 * (2 * 2 + 1), (2 * 3 - 1) * 3, ...,
    ' (2 * j - 1) * j, j * (2 * j + 1), ...
    '
    '
    '''
    import integer
    i = 2
    flena, flenb, flenc = len(integer.factors(2 * i - 1)), len(integer.factors(i)), len(integer.factors(2 * i + 1))
    while True:
        if flena * flenb > n:
            return i * (2 * i - 1)
        elif flenb * flenc > n:
            return i * (2 * i + 1)
        
        i += 1
        flena, flenb, flenc = flenc, len(integer.factors(i)), len(integer.factors(2 * i + 1))
def calc_v1(n):
    '''
    ' 
    '''
    import integer
    i = 1
    while True:
        triangle_number = i * (i + 1) / 2
        factors = integer.factors(triangle_number)
        if len(factors) > n:
            return triangle_number
        i += 1