combilineaire.py

Created by nicolas-patrois

Created on January 30, 2019

448 Bytes

Trouve le plus petit nombre qu’on ne peut pas décomposer en une combinaison linéaire (à coefficients positifs ou nuls) des éléments donnés en argument.


def prod(l):
  p=1
  for e in l:
    p*=e
  return p

def combilin(s={6,9,13}):
  if len(s)<=1:
    raise ValueError("Pas assez de valeurs.")
  crible=["0"]*prod(s)
  for e in s:
    crible[e]="1"

  S={0}
  temp={1}
  while temp:
    temp=set()
    E=min(S)
    S.discard(E)
    for e in s:
      i=e+E
      if i<len(crible):
        temp.add(i)
        crible[i]="1"
    S|=temp

  return "".join(crible).index("1"*min(s))-1