zoukankan      html  css  js  c++  java
  • 欧几里得

    欧几里得

    define(定义) (yygcd(a, b) = c)(a, b) 的公约数。

    这里的 (yygcd(a, b)) 可以理解为 (gcd(a, b)),不过在未证明求出来的公约数就是最大公约数的时候,用 (yygcd) 表示,更加严谨。

    关于欧几里得定理这个东西,我在全网上也没有找到什么好的讲解。所以决定自己来写一写自己都证了好久

    欧几里得的应用一般是用在求 (gcd) 的时候用的,用辗转相除发递归求 (gcd)

    相信大家一般都是直接用的,没有想过去证明它,认为他很显然 是吧。

    我最开始也是这样以为的,但是却发现自己证了好久。 肯定是我太菜了

    不多废话。。。

    我就只讲一下欧几里得求 (gcd) 的证明。好像欧几里得就这个作用

    先写出众所周知的公式:

    (gcd(a, b) = gcd(b, a \% b))

    然后不断递归就行了。

    现在来证明如上等式:

    (yygcd(a, b) = c)

    那么, (a = c * k1)(b = c * k2) ((k1)(k2) 互质)

    那么, (yygcd(a, b) = yygcd(c * k1, c * k2))

    (a \% b = c * (k1 \% c) * k2 = (k1 \% k2) * c)

    上面这一步需要好好理解一下,如果(k1)(k2)不互质的话就没有这个结论

    证明如下:

    原式可以展开如下 : (c * k1 = c * k2 * t + e)

    这个 (t) 可以为 (0),而这个 (e) 就是 (a \% b)

    (a \% b = c * k1 - c * k2 * t = c * (k1 - k2 * t)) 这里不就可以显然的看出 (a \% b) 就是 (c) 的倍数了。

    再写出它需要到达的状态:

    (yygcd(b, a \% b) = yygcd(c * k2, c * k1 \% c * k2))

    在如上面所证,提取一个 (c)

    =》 (yygcd(c * k2, c * (k1 \% k2)))

    我们只需要证明这个东西和原式的 (yygcd) 相等就行。

    那么,我们还需要知道的是 (k2)(k1 \% k2) 互质。

    那么就能保证两数的 (yygcd) 是相等的。

    (k3 = k1 \% k2)

    那么,(k1 = k2 * t + k3)

    用反证法可得:

    如果 (k2)(k3) 不互质,那么肯定有一个会存在一个 (d);

    使 (k3 = d * p3), (k2 = d * p2).

    那么 (k1 = k2 * t + k3 = p2 * d * t + p3 * d = d * (p2 * t + p3))

    所以,(yygcd(k1, k2) = d) 又因为 (yygcd(k1, k2) = 1)

    (d) 只能等于 (1)。所以 (k3)(k2) 互质。

    所以 (k2)(k1 \% k2) 互质。

    又因为,(yygcd(a, b) = yygcd(b, a \% b)).

    所以,窝们可以知道 (gcd(a, b) = gcd(b, a \% b))

    证毕!QAQ

    放个代码,虽然没什么用:

    int gcd(int x, int y) {
        if(y == 0) return x;
        return gcd(y , x % y);
    }
    
  • 相关阅读:
    php
    php数据排序---array_multisort
    IOS 线程描述
    IOS 进程描述
    IOS 强指针(strong)和弱指针(weak)
    IOS autosizing(设置控件的固定位置大小)
    IOS UIActivityIndicatorView动画
    IOS UIImageView的帧动画
    IOS Block动画
    IOS UIView动画(封装动画)
  • 原文地址:https://www.cnblogs.com/Flash-plus/p/12028349.html
Copyright © 2011-2022 走看看