def solve(n):
    """
    Count the maximal number of occurrences of every prime number
    that appears in the decomposition of each number
    until n
    """
    p = PrimeDecomposition()

    decompositions = dict()
    for i in range(2, n + 1):
        decompositions[i] = p.decompose(i, [], 0)

    multiplicities = dict()
    for _, dec in decompositions.iteritems():
        primes_occurrences = occurrences(dec)
        for prime, prime_occurrences in primes_occurrences.iteritems():
            if prime in multiplicities:
                multiplicities[prime] = max(
                    multiplicities[prime],
                    prime_occurrences
                )
            else:
                multiplicities[prime] = prime_occurrences

    solution = 1
    for prime, multiplicity in multiplicities.iteritems():
        solution *= pow(prime, multiplicity)

    return solution
def solve(n=10001):
    assert n >= 1
    p = PrimeDecomposition()

    for i in range(n+10):
        p.get_one_more_prime()

    return p.primes_list[n - 1]
def sum_prime(n):
    p = PrimeDecomposition()

    p.get_primes_until(n + 10)

    return sum(
        [p for p in p.primes_list if p <= n]
    )