◂ 20 décembre 2015 ▸
Infinite Elves and Infinite Houses :
- code_partie1.py
- code_partie2.py
- 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