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