获得唯一的数字组合

时间:2009-10-29 10:08:38

标签: math numbers

是否可以不使用取幂来得到一组数字,当它们加在一起时,总是给出唯一的总和?

我知道可以用取幂来完成(见第一个答案):The right way to manage user privileges (user hierarchy)

但是我想知道如果没有取幂就有可能。

4 个答案:

答案 0 :(得分:3)

不,你只能使用取幂,因为较低值之和必须小于唯一的新数:1 + 2 = 3 <1。 4,1 + 2 + 4 = 7 <1。 8。

<强> [编辑:] 这是一个非专业人士的解释,当然还有其他可能性,但没有一个像使用2的指数一样高效。

答案 1 :(得分:1)

有可能在没有指定的情况下完成(我不是数学专家),但不是以任何方式比指数更有效。这是因为每个可能的值只需要一点存储空间,作为一个额外的加号,您可以使用布尔运算符来对值进行有用的操作。

答案 2 :(得分:1)

如果将自己限制为整数,则数字必须以指数函数的速度增长至少。如果你发现一个增长得更快的函数(比如,哦,也许是Ackermann函数),那么由它产生的数字也可能会起作用。

使用浮点数,您可以继续添加素数的唯一不可约根(sqrt(2)sqrt(3)sqrt(5),...),并且您将始终获得一些独特的,直到你达到浮点精度的极限。不确定你可以挤出多少个独特的数字 - 也许你应该尝试一下。

答案 3 :(得分:1)

没有。要直接看到这一点,请考虑通过在每个步骤中考虑可以作为下一个值包含的最小可能正整数来构建基础值集。要添加的下一个数字必须与集合中已有数字的所有可能总和(包括空总和,即0)不同,并且不能与已存在的数字的任何组合组合以产生副本。所以......

{} : all possible sums = {0}, smallest possible next = 1
{1} : all possible sums = {0, 1}, smallest possible next = 2
{1, 2} : all possible sums = {0, 1, 2, 3}, smallest possible next = 4
{1, 2, 4} : a.p.s. = {0, 1, 2, 3, 4, 5, 6, 7}, s.p.n. = 8
{1, 2, 4, 8} ...

当然,我们正在建立二元权力。你可以从{1,2}以外的东西开始,但看看会发生什么,使用“尽可能小的下一个”规则:

{1, 3} : a.p.s. = {0, 1, 3, 4}, s.p.n. = 6 (because 2 could be added to 1 giving 3, which is already there)
{1, 3, 6} : a.p.s. = {0, 1, 3, 4, 6, 7, 9, 10}, s.p.n = 11
{1, 3, 6, 11} ...

这个序列的增长速度超过了二元幂,逐个词。

如果你想要一个不错的Project-Euler-style programming challenge,你可以编写一个带有一组正整数的例程,并在“sums必须唯一”约束下确定“最小可能的下一个”正整数。