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

Aus*_*yde 2 math hash greatest-common-divisor

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

gcd(a,0) = a
gcd(a,b) = gcd(b, a % b)
Run Code Online (Sandbox Code Playgroud)

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

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

当然,我可以使用key = a*20 + b,或者key = a + b*20,但是那些是不对称的 - 关键(1,5)是不同于(5,1).

我怎么能实现这个?

Mik*_*lov 5

首先,对数字进行排序.

key = a > b ? b*20 + a : a*20 + b;
Run Code Online (Sandbox Code Playgroud)