Antecedentes
La moneda oficial de la nación imaginaria de Golfenistán es el foo , y solo hay tres tipos de monedas en circulación: 3 foos, 7 foos y 8 foos. Uno puede ver que no es posible pagar ciertas cantidades, como 4 foos, usando estas monedas. Sin embargo, se pueden formar todas las cantidades suficientemente grandes. Su trabajo es encontrar la mayor cantidad que no se puede formar con las monedas (5 foos en este caso), lo que se conoce como el problema de la moneda .
Entrada
Su entrada es una lista de enteros positivos, que representan los valores de las monedas en circulación. Hay dos cosas garantizadas al respecto:L = [n1, n2, ..., nk]
- El MCD de los elementos de
L
es 1. L
no contiene el número 1.
Puede estar sin clasificar y / o contener duplicados (piense en monedas de edición especial).
Salida
Como el MCD de L
es 1, cada entero lo suficientemente grande m
puede expresarse como una combinación lineal no negativa de sus elementos; en otras palabras, tenemos
m = a1*n1 + a2*n2 + ... + ak*nk
para algunos números enteros . Su salida es el entero más grande que no se puede expresar de esta forma. Como pista, se sabe que la salida siempre es menor que , si y son los elementos máximos y mínimos de ( referencia ).ai ≥ 0
(n1 - 1)*(nk - 1)
n1
nk
L
Reglas
Puede escribir un programa completo o una función. El conteo de bytes más bajo gana, y las lagunas estándar no se permiten. Si su idioma tiene una operación incorporada para esto, no puede usarlo. No hay requisitos de tiempo o eficiencia de memoria, excepto que debe poder evaluar los casos de prueba antes de publicar su respuesta.
Después de publicar este desafío, el usuario @vihan señaló que Stack Overflow tiene un duplicado exacto . Basado en esta discusión Meta , este desafío no se eliminará como un duplicado; sin embargo, pido que todas las respuestas basadas en las de la versión SO deben citar los originales, recibir el estado de Wiki de la comunidad y eliminarse si el autor original desea publicar su respuesta aquí.
Casos de prueba
[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)
como el límite superior, dónde p
y q
son el elemento más pequeño y más grande del conjunto.
[2,3]
en un tiempo razonable y nada más. [2,5]
crearía alrededor de un millón de listas de Python en la memoria.
FrobeniusNumber
en Mathematica