背景
虚构的高尔夫国家的官方货币是foo,并且流通的硬币只有三种:3foos,7foos和8foos。可以看到,使用这些硬币不可能支付一定的金额,例如4 foos。然而,可以形成所有足够大的数量。您的工作是找到硬币无法形成的最大数量(在这种情况下为5个foos),这就是硬币问题。
输入项
您的输入是一个正整数列表,代表正在流通的硬币价值。对此有两点保证:L = [n1, n2, ..., nk]
- 的元素的GCD
L
为1。 L
不包含数字1。
它可能未分类和/或包含重复项(请考虑特别版硬币)。
输出量
由于GCD L
为1,所以每个足够大的整数m
都可以表示为其元素的非负线性组合。换句话说,我们有
m = a1*n1 + a2*n2 + ... + ak*nk
对于一些整数。您的输出是无法以这种形式表示的最大整数。提示一下,已知输出总是小于,如果和是(reference)的最大和最小元素。ai ≥ 0
(n1 - 1)*(nk - 1)
n1
nk
L
规则
您可以编写完整的程序或函数。最低字节数获胜,并且不允许出现标准漏洞。如果您的语言对此具有内置操作,则可能无法使用。对时间或内存效率没有任何要求,只是您应该能够在发布答案之前评估测试用例。
在我发布此挑战后,用户@vihan指出Stack Overflow有一个完全相同的副本。基于此元讨论,此挑战将不会被删除。但是,我要求所有基于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
[2,3]
在合理的时间内完成,无其他操作。[2,5]
将在内存中创建大约一百万个Python列表。
FrobeniusNumber
在Mathematica中。