我目前使用此代码找到最大公约数和最小公倍数如何有效地获得一系列数字的GCD和LCM?
def gcd(a, b):
while b != 0:
a, b = b, a%b
return a
def lcm(a, b):
result = a*b/gcd(a,b)
return result
但是如果我要为号码列表做到这一点如[4,5,7,1,5,7,10,1,16,24]等?我受限于循环?在哈希表
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a%b)
存储您所有的GCD值:
如果你已经计算出的值,您可以节省计算值在某种与第一次检查的有一个HashMap,如果你有你不需要重新计算它,否则,你将有至。 – lfxgroove 2012-01-10 16:18:47
@Anton。另外,将所有中间结果保存(缓存)到内存中,并在每次迭代中检查缓存。对于足够大的数目足够大的列表,这将更快。 – Martijn 2012-01-10 16:29:43
我知道如何使用memoization分类器;我怎么能在这里使用这些? – 2012-01-10 16:31:48