Contexte
La monnaie officielle de la nation imaginaire du Golfenistan est le foo , et il n'y a que trois types de pièces en circulation: 3 foos, 7 foos et 8 foos. On peut voir qu'il n'est pas possible de payer certains montants, comme 4 foos, en utilisant ces pièces. Néanmoins, toutes les quantités suffisamment importantes peuvent être formées. Votre travail consiste à trouver le plus grand montant qui ne peut pas être formé avec les pièces (5 foos dans ce cas), ce qui est connu comme le problème des pièces .
Contribution
Votre entrée est une liste d'entiers positifs, représentant les valeurs des pièces en circulation. Deux choses sont garanties à ce sujet:L = [n1, n2, ..., nk]
- Le GCD des éléments de
L
est 1. L
ne contient pas le chiffre 1.
Il peut ne pas être trié et / ou contenir des doublons (pensez aux pièces en édition spéciale).
Production
Puisque le GCD L
est de 1, chaque entier suffisamment grand m
peut être exprimé comme une combinaison linéaire non négative de ses éléments; en d'autres termes, nous avons
m = a1*n1 + a2*n2 + ... + ak*nk
pour certains entiers . Votre sortie est le plus grand entier qui ne peut pas être exprimé sous cette forme. À titre indicatif, il est connu que la sortie est toujours inférieure à , si et sont les éléments maximal et minimal de ( référence ).ai ≥ 0
(n1 - 1)*(nk - 1)
n1
nk
L
Règles
Vous pouvez écrire un programme complet ou une fonction. Le nombre d'octets le plus bas l'emporte et les failles standard sont interdites. Si votre langue a une opération intégrée pour cela, vous ne pouvez pas l'utiliser. Il n'y a aucune exigence en termes de temps ou d'efficacité de la mémoire, sauf que vous devriez être en mesure d'évaluer les cas de test avant de publier votre réponse.
Après avoir posté ce défi, l'utilisateur @vihan a souligné que Stack Overflow a un doublon exact . Sur la base de cette discussion Meta , ce défi ne sera pas supprimé en tant que doublon; cependant, je demande que toutes les réponses basées sur celles de la version SO doivent citer les originaux, avoir le statut de wiki communautaire et être supprimées si l'auteur original souhaite poster sa réponse ici.
Cas de test
[3, 7, 8] -> 5
[25, 10, 16] -> 79
[11, 12, 13, 14, 13, 14] -> 43
[101, 10] -> 899
[101, 10, 899] -> 889
[101, 10, 11] -> 89
[30, 105, 70, 42] -> 383
[2, 51, 6] -> 49
(p - 1)(q - 1)
comme limite supérieure, où p
et q
sont le plus petit et le plus grand élément de l'ensemble.
[2,3]
dans un laps de temps raisonnable et rien d'autre. [2,5]
créerait environ un million de listes Python en mémoire.
FrobeniusNumber
en Mathematica.