摘要:
/* "简单的东西, 往往包含深刻的道理" 回头一看, 发现简单的算法, 证明却不是很简单 前置知识 a|b代表a可以整除b d|a && d|b => d|(xa + yb) (a, b)表示a, b的公约数 gcd(a, b)表示a, b的最大公约数 证明d|a => id=a, d|b => 阅读全文
摘要:
exgcd求ax + by = gcd(a, b)中x和y的通解(下面简称通解) 新整理的文章在这,可能不全,这是老文章,新文章 /* 什么是通解 我们知道二元一次方程, 是如果只有一个式子, 那么解会有无数个 而通解就是指让我们只找到一个解就可以推出其他所有解的式子 (注意本证明极其复杂, 请直接 阅读全文
摘要:
例题https://www.luogu.com.cn/problem/P1339 朴素dijkstra (邻接表) dijkstra 正确性来自于贪心 也就是st数组内的数(dist) 必须逐渐变大这样才能保证后面的数更新的时候,当前的第三边dist[t]都是最小值 [详见](https://www 阅读全文
摘要:
新的排版 有点时间补一下这玩意吧 首先先说明RMQ是一类问题, 指 区间最大最小值, 而ST表是解解决RMQ问题的一把手术刀 (手术刀, 锋利但不通用) 作用 O(logn)的预处理 O(1)的区间最大值查询 不可以更改区间数值 原理 原理是倍增 我们将设f[i][j]是从i处向外2^j格里面的最大 阅读全文
摘要:
矩阵 顾名思义就是一个小破方阵 类似这样 0 0 1 1 0 1 0 1 0 1 1 1 0 0 0 0 这就是一个四行四列的矩阵, 矩阵包含三个信息, 长度, 宽度, 数值 数值就是矩阵里每一位上的数值, 通常用一个数值来存 为了方便使用我们常写成结构体形式 定义 struct Mat { int 阅读全文
摘要:
仅看证明可移步到 扩展欧几里得(新) - blind5883 - 博客园 (cnblogs.com)。 下方含逆元概念。 /* "数学的恐怖qwq" 想了半天终于明白了, 这里尽量通俗的写出来 扩展欧几里得算法有很多版本 这里写两个, 选择喜欢的使用 扩欧可以解决两项未知解, 具体原理来自裴蜀定理 阅读全文
摘要:
欧拉函数 定义法 定义法求欧拉函数是O(sqrt(n))的时间复杂度 只可以求单个数的欧拉函数, /* 欧拉函数φ的定义, φ(i)表示从[1, i]之间和i互质的数量(a和b互质即gcd(a, b) == 1) 欧拉函数是积性函数, 例如a, b都为质数, 那么φ(a*b) = φ(a) * φ( 阅读全文
摘要:
龟速乘和快速乘都是为了防止模数大于int, 导致爆long long的情况 关于O(1)快速乘和关于其特判的原因 - :Dra - 洛谷博客 (luogu.com.cn) 快速幂 原理 利用二进制的思想, 把a的k次幂中的k变成一个二进制数 然后根据二进制数的每一位1把a的k次幂求出来 例如 \(5 阅读全文
摘要:
/* "爆int, 爆int, 你就会爆int了是吧" 还是挺难的一道题 具体思路就是通过求出b1的所有约数, 然后看看其中有几个满足gcd(a0, x) == a1 && lcm(b0, x) == b1的数x 通过上一题其实可以求出来, 在int范围内一个数的约数数量最多只有1600个 lcm可 阅读全文
摘要:
题目链接 第一次用博客园啊, 写的不好请见谅; 下面说说题目 题目让求这几个点为叶节点形成的树的边权和, 但是我们可以抽象一下, 看成是在给定两个点的线段上不断加线段, 使其成为一棵树. 这样说可能不好懂, 见下图 图中的圆圈是叶节点 题目就是求以这几个点为叶节点的树(设为E)的最小边权和 为什么是 阅读全文