根据两个输入找到一个独特的输出?

Raz*_*t4x 2 c# algorithm math unique

我需要找到一种方法,这样用户必须输入2个数字(int),并且对于每个不同的值,返回单个输出(最好是int).假设用户输入6, 8它返回k当用户输入任何其他类似6,79,8其他任何输入时(m, n除非6, 8(即使只更改了一个输入))产生完全不同的输出.但问题是,它应该是唯一的,m, n所以我不能使用像是m*n因为6 X 4 = 24但也是,12 X 2 = 24所以输出不是唯一的,所以我需要找到一种方法,对于每个不同的输入,有一个完全不同的输出,是没有重复任何其他价值.

编辑:回应尼古拉斯:输入范围可以是任何但不到1000(但当然超过1)!

编辑2:响应Rawling,我可以使用long(Int64)但不优选使用float或doulbe,因为这个输出将用于for循环,而float和double对于for循环来说很糟糕,你可以在这里查看

Cho*_*ett 7

由于您的两个数字小于1000,您k = (1000 * x1) + x2可以获得唯一的答案.最大值将999999在32位的范围内int.


ami*_*mit 6

你总是可以long从两个整数返回:ab返回2^|INT_SIZE|*a + b

鸽子原理很容易看出,给定两个整数,不能为每个不同的输入返回唯一的int.说明:如果你有2个数字,每个都包含n位,那么2^n每个数字都有(2^n)^2可能,因此有可能的对,所以从馅饼原理 - 你需要至少lg_2((2^n)^2) = 2n 比特来代表它们,

编辑:您的编辑提到您的数字范围[1,1000]- 因此可以应用相同的想法:1000*a + b将为每对产生一个唯一的int.
请注意,出于同样的原因,结果整数的范围必须是[1,1000000]- 否则您将得到冲突.