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