| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 0x08 扩展GCD和同余 -> 正文阅读 |
|
[C++知识库]0x08 扩展GCD和同余 |
0x08 目录7.1 同余
7.1.1 同余定理
除法 取余的话,就要 用 7.1.2 例题举例
双阶乘的定义是:提供给你个 n,那么 n!! 就是 从 1 到 n 跟 n 有共同就性质的数的 乘积结果。 2021!! = 2021 * 2019 * 2017 …… * 1
这道题 就利用了 同余,首先你要知道 同余这个结论。然后再去 分析这道题,就会感到 很简单了。 ans % 100000 = ans 的后五位数,这是 毋庸置疑的。 然后 我们又 发现 它是 连乘的。则 根据 同余定理,每次 (a * b) % mod 然后 相乘 再 % mod 就 跟 ans % 100000 是等价的。7.2 GCD 最大公因数求最大公约数、最小公倍数、素数、矩阵的加减乘除、闰年和平年、快速幂 、数列 …… 等等 这些 都是 最基本的 数学问题。是 我们在解决 一系列 算法题时 的基础数学常识。 7.2.1 辗转相除法辗转相除法 时 欧几里得 发明出来 求解 两数 的最大公因数的数学方法。 其操作步骤是:a % b = c 然后 让 a = b,b = c 一直这样进行下去,直到 b == 0 的时候,我们 才会停止下来。然后 此时 a 的值 其实就是 两数的 最大公因数。
很不建议 用 递归的写法,因为 递归 很容易 栈溢出。
这种 正常的 迭代 写法,反而 是最好的。我们只需要 把 这种方法 封装到 一个 函数里就行了。 7.2.2 更相减损法
第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。 第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。 则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。 从上述这个过程来看,就是个模拟。我们可以用 代码写出来!
7.2.3 最小公倍数
7.3 扩展 GCD · 贝祖定理GCD 求最大公因数的 这个方法,其实 还可以运用 在 求解 贝祖定理:对任何整数 a、b 和 它们的最大公因数 c,关于 未知数 x 和 y 的线性不定方程(称为贝祖等式):若 a、b 是 整数,且 gcd(a,b) = c,那么 对于 任意 的 整数 x,y,ax+by 都一定是 d 的倍数,特别地,一定存在 整数 x,y 使得 ax+by = c 成立。
你还需要知道的是:取余算法是这样的式子 那么 我们 根据 欧几里得算法 和 贝祖定理 就可以推导出 下面的 等式。
其实 很简单,由欧几里得 gcd 可知,a = b,b = a % b 也就是说 系数是会不断的 变化的,但 变化到 a = 最大公因数 b = 0 的时候 就会停下来,而且 无论是 哪两个 a和b 只要是 ax+by = gcd(a,b) * k 这样的式子的话,就肯定 满足。所以 这可以是 求解 第一个 x’ 和 y’ 的 通用方法。 那么我们来模拟 一下 整体的过程。
那么 有人的会问 这是在干嘛呢? 其实 我自己也不知道 是在干嘛。 因为 确实 是 还没有刷到 利用 贝祖定理 的 题目。平常 遇到的 也就是 gcd() 最大公因数 和 最小公倍数。而且 遇到的还很少。所以这个 只作为了解吧。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 1:53:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |