1 条题解

  • 0
    @ 2025-8-24 21:34:33

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Log_x
    **

    搬运于2025-08-24 21:34:33,当前版本为作者最后更新于2017-07-10 21:32:26,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    楼上一群神犇……我就解释下原理吧

    对于 a,ba,bGCD(a,b)GCD(a, b) 有:

    [1]. 若 aa 为奇数,bb 为偶数,GCD(a,b)=GCD(a,b/2)GCD(a, b) = GCD(a, b / 2)

    表示 bb 存在2这个因子而 aa 不存在,则将 bb 除以2,,不考虑因子2;

    [2]. 若 aa 为偶数,bb 为奇数,GCD(a,b)=GCD(a/2,b)GCD(a, b) = GCD(a / 2, b)

    表示 aa 存在2这个因子而 bb 不存在,则将 aa 除以2,不考虑因子2;

    [3]. 若 aa 为偶数,bb 为偶数,GCD(a,b)=2GCD(a/2,b/2)GCD(a, b) = 2GCD(a / 2, b / 2)

    表示 a,ba, b 都存在2这个因子,则 GCD(a,b)GCD(a, b) 也存在因子2,则将当前答案乘以2,a,ba, b 都除以2;

    [4]. 若 aa 为奇数,bb 为奇数,GCD(a,b)=GCD(ab,b)(a>b)GCD(a, b) = GCD(a - b, b) (a > b)

    辗转相减法(更相减损术),实际上可以看做辗转相除法的变形(因为减到不能再减实际上就是取余)。

    最后顺便附上辗转相除法的证明:

    (摘自http://blog.sina.com.cn/s/blog_6938cd0501010pj1.html

    设两数为a,b(a>b)a,b(a>b),求它们最大公约数的步骤如下:用 bbaa ,得 a=bq+r(0r<b)a = bq + r(0 \le r < b)qq 是这个除法的商)。若 r=0r = 0 ,则 bbaabb 的最大公约数。若 r0r \ne 0,则继续考虑。

    首先,应该明白的一点是任何 aabb 的公约数都是 rr 的公约数。要想证明这一点,就要考虑把 rr 写成 r=abqr = a - bq。现在,如果 aabb 有一个公约数 dd,而且设 a=xd,b=yda = xd , b = yd, 那么 r=xdydq=(xyq)dr = xd - ydq = (x - yq)d。因为这个式子中,所有的数(包括 xyqx - yq )都为整数,所以 rr 可以被 dd 整除。

    对于所有的 dd 的值,这都是正确的;所以 aabb 的最大公约数也是 bbrr 的最大公约数。因此我们可以继续对 bbrr 进行上述取余的运算。这个过程在有限的重复后,可以最终得到 r=0r = 0 的结果,我们也就得到了 aabb 的最大公约数。

    • 1

    信息

    ID
    1155
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    递交数
    0
    已通过
    0
    上传者