1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| # La liste initiale des nombres que vous donnez en exemple
ListeNombres=[1,2,3,4,5]
# restitue la décomposition de n en système binaire sous forme de liste
# exemple si n=32
# la valeur retournée est [1,0,0,0,0]
def binaire (n):
L=[]
while n:
L.insert(0,n%2)
n=n/2
return L
#même chose que précédemment mais avec normalisation sur p chiffres
# en rajoutant au besoin des 0 devant
# exemple si n=32 et p = 7
# la valeur retournée est [0,0,1,0,0,0,0]
def normalise (n, p):
L=binaire(n)
while(len(L)<p):
L.insert(0,0)
return L
# fournit la liste des décompositions binaires
# des nombres de 0 à n-1
def enumbase2 (n):
L=[]
p=len(binaire(n))
for i in range(0,n):
L.append(normalise(i,p-1))
return L
# effectue la somme des produits des éléments des 2 listes
def sommeprod(L1,L2):
n=len(L1)
s=0
for i in range(0,n):
s=s+L1[i]*L2[i]
return s
# calcule le nombre d'éléments non nuls dans une liste
def nbtermes (L):
s=0
n=len(L)
for i in range(0,n):
if L[i]!=0:
s=s+1
return s
# recherche les possiblités d'obtenir la somme k
# avec p termes pris dans la liste donnée au début
def recherche (p,k):
L=enumbase2(32)
n=len(L)
for i in range(0,n):
M=L[i]
nbt=nbtermes(M)
sp=sommeprod(M,ListeNombres)
if nbt==p and sp==k:
print M
return
# effectue la recherche que vous donnez en exemple
print recherche(3,10) |
Partager