这是计算最大公约数的函数.辗转相除法
function gcd(a, b)
if b == 0 then
return a
end
return gcd(b, a % b)
end
它的计算其实是使用欧拉定理.
证明
对于任何可以整除a和b的整数,那么它也一定能整除a-b
假设 a b 都有公约数 n 且 a>b, 假设 ,
那么
-
a=kb+t 那么 t=a-kb
因为 a、b都能够被d整除
所以 为整数,
即 为整数,所以 d 也是 t 的公约数.
在均衡负载中,对设置的权重求最大公约数,需要用到 gcd 函数.
当传入的值是非数字时, 比如传入 字符串 “0”, b==0 判断失效
执行 gcd(”0”,nil) ,再次执行 gcd(nil,nil) 导致出现死循环.