如何为两个可互换的整数创建唯一键?

时间:2011-09-15 16:55:52

标签: math hash greatest-common-divisor

我正在尝试为Euclid找到两个数字的GCD的方法编写一个简单的缓存机制:

gcd(a,0) = a
gcd(a,b) = gcd(b, a % b)

请注意gcd(a,b) == gcd(b,a)

对于缓存,我需要找到给定(a,b)(b,a)的密钥,0 < a < 200 < b < 20

当然,我可以使用key = a*20 + bkey = a + b*20,但这些是非对称的 - (1,5)的关键字与(5,1)不同。

我怎么能实现这个?

2 个答案:

答案 0 :(得分:5)

首先,对数字进行排序。

key = a > b ? b*20 + a : a*20 + b;

答案 1 :(得分:2)

设c为min(a,b),d为max(a,b)。然后,您的散列函数c * 20 + d相对于a和b是对称的。