最大公约数

  • 更相减损术:\(\gcd(x,y)=\gcd(x,y-x)(x\leq y)\)。

证明:

设 \(\gcd(x,y)=k\),则 \(x=kp,y=kq,\gcd(p,q)=1\)。

那么 \(\gcd(x,y-x)=\gcd(kp,kq-kp)=k\times\gcd(p,q-p)\)。

设 \(\gcd(p,q-p)=r\),则 \(p=ra,q-p=rb\)。

那么 \(q=r(a+b)\)。

因为 \(\gcd(p,q)=1=\gcd(ra,r(a+b))\)。

所以 \(r=\gcd(a,a+b)=1,\gcd(x,y-x)=\gcd(x,y)=k\),得证。

  • 辗转相除法(欧几里得算法):\(\gcd(x,y)=\gcd(y\bmod x,x)(x\leq y)\)。

取模相当于做多次减法,其实就是更相减损术的优化。

最小公倍数

容斥,两数之积除以两数的最大公约数。

小技巧:若数以质因数分解的形式给出,算最大公约数系数取 \(\min\),算最小公倍数系数取 \(\max\)。

拓展欧几里得算法

有不定方程 \(ax+by=\gcd(a,b)\),求出任意一个整数解(根据裴蜀定理,这东西一定有整数解)。

假设我们当前已经得出了方程

\[b\bmod a\times x+ay=\gcd(b\bmod a,a)
\]

的一组整数解 \(x=p,y=q\),根据 gcd 的性质有

\[b\bmod a\times p+aq=\gcd(a,b)
\]

将取模拆掉

\[(b-\lfloor b/a\rfloor a)p+aq=\gcd(a,b)
\]
\[a(q-\lfloor b/a\rfloor p)+bp=\gcd(a,b)
\]

那么 \(x=q-\lfloor b/a\rfloor p,y=p\) 就是方程 \(ax+by=\gcd(a,b)\) 的一组整数解。

所以在求解 \(ax+by=\gcd(a,b)\) 时我们可以先递归求解 \(b\bmod a\times x+ay=\gcd(b\bmod a,a)\) 然后计算当前的解。

这个递归的终止条件是 \(a=0\),此时 \(x=0,y=1\) 是一组解,返回即可(虽然 \(x\) 取什么都没有关系但我们想让解的绝对值尽量小)。

Tips:通过 exgcd 求出的解的绝对值是小于等于系数的绝对值的最大值的(边界按上面写的),即 \(\max(|x|,|y|)\leq\max(|a|,|b|)\)。

具体证明我也不会,是蛙告诉我滴/qq,先鸽着以后再补。

exgcd 学习笔记的更多相关文章

  1. 扩展欧几里得算法(exGCD)学习笔记

    @(学习笔记)[扩展欧几里得] 本以为自己学过一次的知识不会那么容易忘记, 但事实证明, 两个星期后的我就已经不会做扩展欧几里得了...所以还是写一下学习笔记吧 问题概述 求解: \[ax + by ...

  2. exgcd学习笔记

    扩展欧几里得算法是当已知a和b时,求得一组x和y使得 首先,根据数论中的相关定理,解一定存在        //留坑待填 之后我们可以推一推式子 将a替换掉 展开括号 提出b,合并 且 设 现在已经将 ...

  3. bzoj1477 && exgcd学习笔记

    exgcd 由于忘记了exgcd,这道题就没做出来... exgcd的用处是求ax+by=gcd(a,b)这样方程的解 大概是这个样子的 void ext_gcd(long long a, long ...

  4. 扩展中国剩余定理 exCRT 学习笔记

    前言 由于 \(\{\mathrm{CRT}\}\subseteq\{\mathrm{exCRT}\}\),而且 CRT 又太抽象了,所以直接学 exCRT 了. 摘自 huyufeifei 博客 这 ...

  5. 数论算法 剩余系相关 学习笔记 (基础回顾,(ex)CRT,(ex)lucas,(ex)BSGS,原根与指标入门,高次剩余,Miller_Rabin+Pollard_Rho)

    注:转载本文须标明出处. 原文链接https://www.cnblogs.com/zhouzhendong/p/Number-theory.html 数论算法 剩余系相关 学习笔记 (基础回顾,(ex ...

  6. exLucas学习笔记

    exLucas学习笔记 Tags:数学 写下抛硬币和超能粒子炮改 洛谷模板代码如下 #include<iostream> #define ll long long using namesp ...

  7. OI数学 简单学习笔记

    基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...

  8. OI知识点|NOIP考点|省选考点|教程与学习笔记合集

    点亮技能树行动-- 本篇blog按照分类将网上写的OI知识点归纳了一下,然后会附上蒟蒻我的学习笔记或者是我认为写的不错的专题博客qwqwqwq(好吧,其实已经咕咕咕了...) 基础算法 贪心 枚举 分 ...

  9. 「ExLucas」学习笔记

    「ExLucas」学习笔记 前置芝士 中国剩余定理 \(CRT\) \(Lucas\) 定理 \(ExGCD\) 亿点点数学知识 给龙蝶打波广告 Lucas 定理 \(C^m_n = C^{m\% m ...

随机推荐

  1. Windows2008R2+ IIS7.5+php+mysql 搭建教程

    Windows2008R2+ IIS7.5+php+mysql 搭建教程 1. IIS7.5安装安装角色时候因为 Fastcgi 的需要, aspnet 和 asp 都要选装. 我为了方便,所有的除 ...

  2. 如何处理 Kubeadm 搭建的集群证书过期问题

    Kubeadm 证书过期处理 以下内容参考了如下链接:https://www.cnblogs.com/skymyyang/p/11093686.html 一.处理证书已过期的集群 使用 kubeadm ...

  3. EXCEL计数时间差--分钟数

  4. win10 hyper-v的开启和关闭

    一.开启: 1. 控制面板->程序->启用或关闭Windows功能,Windows功能中勾选hyper-v功能 2. powershell中使用管理员权限运行下面的命令 bcdedit / ...

  5. Maven打包过程

    1.安装maven 下载地址:http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven- ...

  6. python日期与日历Datetime和Calendar模块

    datetime模块 1.1 概述 datetime比time高级了不少,可以理解为datetime基于time进行了封装,提供了更多的实用的函数,datetime的接口更加的直观,更容易调用 1.2 ...

  7. n阶行列式的全排列求解(Java)

    上一个随笔,我介绍了全排列的递归求解,其中还有排列的逆序数等代码,这次我来介绍如何使用全排列计算行列式的值. 使用全排列求行列式的值,简单的描述就是: 对这个行列式每一行选取一个数,这些数处于行列式的 ...

  8. Java工程师高薪训练营-第一阶段 开源框架源码解析-模块一 持久层框架涉及实现及MyBatis源码分析-任务一:自定义持久层框架

    目录 任务一:自定义持久层框架 1.1 JDBC回顾及问题分析 1.2 自定义持久层框架思路分析 1.3 IPersistence_Test编写 1.3.1 XXXMapper.xml详解 1.3.2 ...

  9. C# 集合类(三)

    C# 集合类自己经常用到: 数组(Array).动态数组(ArrayList).列表(List).哈希表(Hashtable).字典(Dictionary),对于经常使用的这些数据结构,做一个总结,便 ...

  10. 《精通Spring4.x企业应用开发实战》第三章

    这一章节主要介绍SpringBoot的使用,也是学习的重点内容,之后就打算用SpringBoot来写后台,所以提前看一下还是很有必要的. 3.SpringBoot概况 3.1.1SpringBoot发 ...