gcd lcm

gcd 是表示两个数的最大公约数

 

int gcd(int a, int b){
    return b==0?a:gcd(b, a%b);
}

 在这里 , gcd(a, b) 是等于 gcd(b, a%b) , 证明如下 :

令 a = kb + p , gcd(a, b) = c , 那么就是 a, b 都可以整除 c , 那么 kb 也可以整除 c ,那么 a - kb 也可以整除 c , 所以 b 和 a%b 都可以整除 c

 

lcm 是表示两个数的最小公倍数 , 那么两个数的最小公倍数就等于两数之积除以两个数的最小公倍数

证明如下 :

  设两个数 a = k1 * gcd, b = k2*gcd, 设 a , b 两个数的最小公倍数是 lcm , 那么lcm = t1 * a, lcm = t2 * b , 那么就有 t1*a = t2*b, 即 t1*k1*gcd = t2*k2*gcd , 因为t1 与 t2 互质, k1 与 k2互质,所以 t1 = k2, t2 = k1, 那么 lcm = k1*k2*gcd , 即 lcm = a*b/gcd;

posted @ 2018-02-19 19:14  楼主好菜啊  阅读(148)  评论(0编辑  收藏  举报