예제 #1
0
def stage19():
    calculator = calc666.Calc666([".", "1", "2"],
                                 binary_inverse=stage19_inverse)
    factors = helper.get_factors(666)
    nodes = [calculator.root]
    for i in range(1, 3):
        next_level = []
        for node in nodes:
            print(node)
            factors = helper.get_factors(node.value)
            for val in factors:
                calculator.add_nodes_binary(node, val)
            for n in node.binary_children:
                next_level.append(n[0])
                next_level.append(n[1])
        nodes = list(next_level)
예제 #2
0
def problem_12():
    """What is the value of the first triangle number to have over five hundred
    divisors?"""
    # Closed form: \sum_i=1^n i = (n * (n + 1)) / 2
    for n in xrange(7, 100000): # Don't loop forever.
        triangle = (n * (n + 1)) / 2
        if len(helper.get_factors(triangle)) >= 250:
            return triangle
    raise Exception('No solution to problem 12 found!')
예제 #3
0
def problem_9():
    """There exists exactly one Pythagorean triplet for which
    a + b + c = 1000. Find the product abc."""
    # Using Euclid's formula:
    # http://en.wikipedia.org/wiki/Pythagorean_triple#Generating_a_triple
    # 1000 = a + b + c = (m**2 - n**2) + 2mn + (m**2 + n**2) = 2m**2 + 2mn =>
    # 500 = m**2 + mn = m (m + n)
    for f1, f2 in helper.get_factors(500):
        m, n = (f1, f2 - f1) if f2 > f1 else (f2, f1 - f2)  # Avoid negatives.
        m, n = (m, n) if m > n else (n, m)  # Make sure m > n.
        a, b, c = (m ** 2 - n ** 2, 2 * m * n, m ** 2 + n ** 2)  # Euclid's formula.
        if a + b + c == 1000:
            return a * b * c
    raise error("No solution to problem 9 found!")