sfondo
La valuta ufficiale della nazione immaginaria del Golfenistan è il foo , e ci sono solo tre tipi di monete in circolazione: 3 foos, 7 foos e 8 foos. Si può vedere che non è possibile pagare determinati importi, come 4 soldi, usando queste monete. Tuttavia, possono essere formati tutti gli importi abbastanza grandi. Il tuo compito è quello di trovare la più grande quantità che non può essere formata con le monete (5 foos in questo caso), che è noto come il problema delle monete .
Ingresso
Il tuo input è un elenco di numeri interi positivi, che rappresentano i valori delle monete in circolazione. Due cose sono garantite al riguardo:L = [n1, n2, ..., nk]
- Il GCD degli elementi di
L
è 1. L
non contiene il numero 1.
Può essere non ordinato e / o contenere duplicati (pensa alle monete in edizione speciale).
Produzione
Poiché il GCD di L
è 1, ogni intero abbastanza grande m
può essere espresso come una combinazione lineare non negativa dei suoi elementi; in altre parole, abbiamo
m = a1*n1 + a2*n2 + ... + ak*nk
per alcuni numeri interi . L'output è il numero intero più grande che non può essere espresso in questo modulo. Come suggerimento, è noto che l'output è sempre inferiore a , se e sono gli elementi massimi e minimi di ( riferimento ).ai ≥ 0
(n1 - 1)*(nk - 1)
n1
nk
L
Regole
È possibile scrivere un programma completo o una funzione. Vince il conteggio di byte più basso e non sono consentite scappatoie standard. Se la tua lingua ha un'operazione integrata per questo, non puoi usarla. Non ci sono requisiti di tempo o efficienza della memoria, tranne che dovresti essere in grado di valutare i casi di test prima di pubblicare la tua risposta.
Dopo aver pubblicato questa sfida, l'utente @vihan ha sottolineato che Stack Overflow ha un duplicato esatto . Sulla base di questa discussione Meta , questa sfida non verrà eliminata come duplicato; tuttavia, chiedo che tutte le risposte basate su quelle della versione SO debbano citare gli originali, ottenere lo status di Wiki della comunità ed essere eliminate se l'autore originale desidera pubblicare qui la propria risposta.
Casi 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)
come il limite superiore, dove p
e q
sono l'elemento più piccolo e più grande dell'insieme.
[2,3]
in un ragionevole lasso di tempo e nient'altro. [2,5]
creerebbe circa un milione di liste Python in memoria.
FrobeniusNumber
in Mathematica.