Фон
Офіційною грошовою одиницею уявної нації Golfenistan є foo , і в обігу є лише три види монет: 3 foos, 7 foos та 8 foos. Видно, що за ці монети неможливо сплатити певні суми, наприклад, 4 фути. Тим не менш, всі великі суми можуть бути сформовані. Ваше завдання - знайти найбільшу суму, яку неможливо сформувати разом з монетами (5 футів у цьому випадку), яка відома як проблема монети .
Вхідні дані
Ваша інформація - це список натуральних чисел, що представляють значення монет в обігу. Про це гарантовано дві речі:L = [n1, n2, ..., nk]
- GCD елементів
L
дорівнює 1. L
не містить числа 1.
Він може бути несортованим та / або містити дублікати (думаю, монети спеціального видання).
Вихідні дані
Оскільки GCD L
дорівнює 1, кожне досить велике ціле число m
може бути виражене як негативна лінійна комбінація його елементів; Іншими словами, у нас є
m = a1*n1 + a2*n2 + ... + ak*nk
для деяких цілих чисел . Ваш вихід є найбільшим цілим числом, яке не може бути виражено у цій формі. Як підказку, відомо, що вихід завжди менший за , якщо і є максимальними і мінімальними елементами ( посилання ).ai ≥ 0
(n1 - 1)*(nk - 1)
n1
nk
L
Правила
Ви можете написати повну програму або функцію. Виграє найменший кількість байтів, а стандартні лазівки заборонені. Якщо ваша мова має вбудовану операцію для цього, ви можете не використовувати її. Ніяких вимог щодо ефективності часу чи пам’яті немає, за винятком того, що ви повинні мати можливість оцінювати тестові випадки, перш ніж розміщувати відповідь.
Після того як я опублікував цей виклик, користувач @vihan вказав, що стек Overflow має точний дублікат . Виходячи з цього обговорення в Meta , цей виклик не буде видалений як дублікат; проте я прошу, щоб усі відповіді, засновані на версіях версії SO, цитували оригінали, надавали статус спільноти Wiki та були видалені, якщо автор-оригінал хоче опублікувати свою відповідь тут.
Випробування
[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)
як верхню межу, де p
і q
є найменшим і найбільшим елементом набору.
[2,3]
за розумну кількість часу і більше нічого. [2,5]
створило б близько мільйона списків Python в пам'яті.
FrobeniusNumber
в Математиці.