结合两个唯一的数字(顺序无关紧要)来创建唯一的数字

时间:2014-02-24 15:49:57

标签: logic algebra

我正在创建一个网站,其中选择了可能的117个中的2个项目,并以不同的方式进行比较。我需要一种方法来为这些比赛中的每一个分配一个唯一的号码,以便它们可以很容易地存储在数据库中,而不是。我见过配对函数,但我找不到哪个顺序无关紧要。例如,我希望2和17的唯一数字与17和2相同。是否有满足此要求的等式?

2 个答案:

答案 0 :(得分:0)

这取决于您使用的编程语言。

在Java中,例如它很容易,因为相同的种子正在产生相同的随机数序列。所以你可以简单地使用两个随机数的总和

 Long seed = 2L + 17L;
 Long seed2 = 17L+2L;
 Random random = new Random(seed);
 Random random2 = new Random(seed2);

 Boolean b = (random.nextLong() == random2.nextLong()) //true

但是,这也会为1+180+19等返回相同的值 - 无论总和多达19个。

因此,要获得“每对”真正唯一的数字,您需要转移其中一个。 IE,有117个条目,你可以将SMALLER(或更大)乘以1000:

Long seed = 2L * 1000 + 17L;
....

然后你有一个2,17和17,2的唯一随机数 - 但是19,0或0,19会产生一个不同的随机数。

ps。:如果它应该总是返回相同的2,19 - 结果实际上不是随机数,不是吗?

答案 1 :(得分:0)

我知道这个问题可以追溯到2014年,但我仍然希望添加以下答案。 您可以使用素数乘积来完成此操作。例如,如果你的对是(2,4),那么你可以使用第二个素数(= 3)和第四个素数(= 7)的乘积作为你的id(= 3 * 7 = 21)。 / p>

为了使用117种可能的组合来执行此操作,您需要预先计算所有前117个素数并将它们存储在例如数组或哈希表中,然后执行类似(在JavaScript中):< / p>

var primes = [2,3,5,7,...];
var a = 2;
var b = 17;
var id = primes[a-1]*primes[b-1];

请注意,如果您想要解码它们,事情会变得更加困难,因为您需要计算您的ID的素数分解。