[AcWing 872] 最大公约数

image

欧几里得算法(辗转相除法)

复杂度 O(log(n))

总体复杂度 105×log(2×109)4×106


点击查看代码
#include<iostream>

using namespace std;

int gcd(int a, int b)
{
    return b ? gcd(b, a % b) : a;
}
int main()
{
    int n;
    scanf("%d", &n);
    while (n --) {
        int a, b;
        scanf("%d %d", &a, &b);
        printf("%d\n", gcd(a, b));
    }
    return 0;
}

  1. a, b 的最大公约数记为 (a, b),a 能整除 b 记作 ab
  2. 重要性质: (a, b)=(b, amodb),证明如下:
    amodb=aabb=acb
    ② 如果 dadb,那么 d(ax+by)
    (b, amodb) = (b, acb),即证 (a, b)=(b, acb)
    从左边推右边:设 da, b 的任一公约数,dadb,则由 ② ,取 x=1, y=c,可推出 d(acb)
    从右边推左边:设 db, acb 的任一公约数, dbd(acb),则由 ②,取 x=c, y=1,则 d(cb + acb),即 da
  3. xmod0=x
posted @   wKingYu  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
欢迎阅读『[AcWing 872] 最大公约数』
点击右上角即可分享
微信分享提示