Advent of code

 20 décembre 2015 

  Infinite Elves and Infinite Houses :
  1. code_partie1.py
  2. code_partie2.py
  3. differences.diff
from math import ceil

PRIMES = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, ... 1223]  # pas besoin d'autant   

MAX_PUISSANCE = 8
NB_PRIMES = 8

N = 36000000
N1 = N // 10

def sumDiv(nbs):
    global PRIMES
    s = 1
    for i in range(len(nbs)):
        p = PRIMES[i]
        nb = nbs[i]
        s *= (p**(nb+1) - 1)
        s //= (p-1)
    return s

# si p < q, alors p a un exposant aussi grand que celui de q
def puissances():
    t = NB_PRIMES * [0]
    while True:
        for i in range(NB_PRIMES):
            t[i] += 1
            if t[i] <= MAX_PUISSANCE:
                for j in range(i):
                    t[j] = t[i]
                break
            if i == NB_PRIMES - 1:
                return
            #t[i] = 0
        yield t

def prod(t):
    global PRIMES
    p = 1
    for i in range(len(t)):
        p *= (PRIMES[i]**t[i])
    return p


best = None
for t in puissances():
    s = sumDiv(t)
    if s >= N1:
        p = prod(t)
        if best == None or p < best:
            print(t, p, s)
            best = p