模板
gyr679
Jack of all trades and master of none
展开
-
二分图最大匹配(匈牙利算法)
复杂度O(NM)#include <iostream>#include <vector>#include <cstring>using namespace std;const int N = 505;int n1, n2, m, match[N];bool st[N];vector<int> G[N];bool find(int x) { for (int i = 0; i < (int)G[x].size(); i++原创 2020-07-31 21:42:53 · 378 阅读 · 0 评论 -
欧拉函数
定义:1-N中与N互质的数的个数被称为欧拉函数,即为phi(n)求欧拉函数主要由两类问题:求单个数的欧拉函数O(sqrt(n))求1-N的欧拉函数O(n)对于第一类问题,我们可以使用分解质因数的方法来求,这个可以用容斥原理很容易证明。int phi(int n) { int ans = n; for (int i = 2; i <= n / i; i++) { if (n % i == 0) ans = ans / i * (i - 1); while (n % i == 0原创 2020-07-25 21:20:28 · 240 阅读 · 0 评论 -
逆元的求法
逆元(数论倒数)定义:如果ax≡1 (mod p),且gcd(a,p)=1(a与p互质,不互质的话x肯定不存在),则称a关于模p的乘法逆元为x,记为a^-1。(逆元不唯一)逆元的作用:a/b ≡ a * inv(b) (mod p)证明:a/b ≡ (a/b) * 1 ≡ (a/b) * (b * inv(b)) (模运算对加减乘可交换,对除不可交换)≡ a * inv(b) (mod p)提到逆元就不得不提及取模运算和同余式的相关性质:取模运算只能是整数,比如要求(3/4)% p应理解为3 *原创 2020-07-22 16:13:53 · 5524 阅读 · 1 评论 -
质数相关算法
质数定义:若一个大于2的自然数,只有1和它本身两个因子,则这个数为素数。质数判定:试除法。bool check(int n) { if (n < 2) return false; for (int i = 2; i <= n / i; i++) if (n % i == 0) return false; return true;}质数定理:1 - n中有大约有 n / lnn 个质数调和级数:1 + 1/2 + 1/3 + … + 1/n = lnn + C(常数)原创 2020-07-21 10:38:32 · 787 阅读 · 0 评论 -
扩展欧几里得算法
裴蜀定理:设(a,b) = d,,对于任意的整数x, y,ax + by都一定是d的倍数。特别地,一定存在整数x, y(不一定唯一),使ax + by = d成立。另外,若a不等于b,则d为a和b的线性组合所能表示的最小整数。**扩展欧几里得算法:**用于解决如何求出裴蜀定理中的x, y。对于两个整数a, b,我们都知道欧几里得算法可以用来求这两个数的最大公约数,扩展欧几里得可以在求得最大公约数的同时将系数x, y也求得,这也就是其称为扩展欧几里得算法的原因。...原创 2020-07-19 20:47:53 · 170 阅读 · 0 评论 -
树状数组
树状数组基本用来维护前缀和,相比于数组(查询O(n),修改O(1)),前缀和数组(查询O(1),修改O(n)),其可以做到查询和修改均为logn,因此对于多组查询和修改复杂度为mlongn,远远快于前两者mn的复杂度。其基本思想在于一个数可以唯一进行2进制分解,我要求1 - n这n个数的和,设n = 2^ (i1) + 2 ^ (i2) + … + 2 ^ (ik),其中i1 < i2 < … < ik。我只要维护长度为2 ^ (i1)区间的和,长度为2 ^ (i2)区间的和…最终这些区原创 2020-07-11 16:49:12 · 113 阅读 · 0 评论