Algorithm 构成序列的数之和

Algorithm 构成序列的数之和,algorithm,language-agnostic,discrete-mathematics,Algorithm,Language Agnostic,Discrete Mathematics,昨晚看橄榄球赛的时候,我想知道如果你只能在3分、5分或7分的比赛中得分的话,是否有任何分数是不可能的。没过多久,我们就知道任何大于4的数字都是可以实现的。5=5,6=3+3,7=7,8=3+5,9=3+3+3,10=5+5等等 将该想法扩展到5、7和9会得到以下可能的分数: 5,7,9,10,12,14 // and now all numbers are possible. 第7、9和11条: 7,9,11,14,16,18,20,22,23,25,27 // all possible

昨晚看橄榄球赛的时候,我想知道如果你只能在3分、5分或7分的比赛中得分的话,是否有任何分数是不可能的。没过多久,我们就知道任何大于4的数字都是可以实现的。5=5,6=3+3,7=7,8=3+5,9=3+3+3,10=5+5等等

将该想法扩展到5、7和9会得到以下可能的分数:

5,7,9,10,12,14 // and now all numbers are possible.  
第7、9和11条:

7,9,11,14,16,18,20,22,23,25,27 // all possible from here
我是在脑子里想的,有谁能提出一个好的算法来确定最低可能的分数,高于这个分数,所有分数都可以达到给定的一组分数

我将其建模如下:

forall a < 10:
   forall b < 10:
      forall c < 10:
          list.add(3a + 5b + 7c);
list.sort_smallest_first();
对于所有a<10:
对于所有b<10:
对于所有c<10:
增加(3a+5b+7c);
list.sort_minimate_first();

然后检查列表中是否有大于3的序列(可能的最小分数)。除了琐碎的情况外,任何事情似乎都是不切实际和缓慢的。

只有一个无法达到的数字,超过这个数字,所有分数都是可以达到的

这叫做弗罗贝尼乌斯数。见:

wiki页面应具有用于解决该问题的算法的链接,例如:

对于2个数字a、b,一个精确的公式(ab-a-b)是已知的(您可以使用它来减少搜索空间),对于3个数字a、b、c,一个尖锐的下限(sqrt(3abc)-a-b-c)和相当快的算法是已知的

如果这些数字是算术级数,那么一个精确的公式是已知的(见维基)。我之所以提到这一点,是因为在你们的例子中,所有的数字都是算术级数

因此,要回答你的问题,请找到Frobenius数并加上1


希望能有帮助。

+1看橄榄球赛,如果可以的话,如果你是十字军球迷,我会再给你一个。问得好-在他们提高分数尝试之前,不可能得到19分。非常感谢。这篇维基文章使用了这个确切的例子,给人留下了深刻的印象。关于这件事,有一个关于高尔夫的问题。这是非常奇怪的,这是我在同一时间打开的唯一一页,他们都提到了一些我从未听说过的东西。真是巧合。