Exemplo n.º 1
0
def main(verbose=False):
    primes = sieve(100)

    MAX_n = 10 ** 16

    product_factor_pairs = [(1, 0)]
    product_hash = {0: [1]}
    for num_factors in range(1, 13 + 1):
        product_hash[num_factors] = []

    # (1,0) becomes
    # (1,0), (p, 1) becomes
    # (1,0), (p, 1), (q,1), (q*p, 2) etc.
    for prime in primes:
        to_add = []
        for product, num_factors in product_factor_pairs:
            if prime * product < MAX_n:
                to_add.append((prime * product, num_factors + 1))
                product_hash[num_factors + 1].append(prime * product)
        product_factor_pairs += to_add

    result = 0
    sign = -1
    for num_factors in range(4, 13 + 1):
        sign = -sign
        PIE_factor = sign * choose(num_factors - 1, 3)
        current_sum = 0
        for product in product_hash[num_factors]:
            current_sum += MAX_n / product  # integer division
        result += PIE_factor * current_sum

    return result
Exemplo n.º 2
0
def main(verbose=False):
    expected_hash = {0: 0}
    for n in range(1, 32 + 1):
        to_add = 2 ** n
        for k in range(1, n + 1):
            to_add += choose(n, k) * expected_hash[n - k]
        expected_hash[n] = (to_add * 1.0) / (2 ** n - 1)

    return round(expected_hash[32], 10)
Exemplo n.º 3
0
def main(verbose=False):
    n = 100
    return choose(n + 10, 10) + choose(n + 9, 9) - 10 * n - 2
Exemplo n.º 4
0
def main(verbose=False):
    # In an n x m grid there are (n + m) C m = (n + m) C n such paths.
    return choose(20 + 20, 20)