随笔分类 - 数学
摘要:进制位骚操作总结 lowbit 最低的为 的二进制位。 x&-x 利用负数二进制存储为补码的性质,我们知道负数补码是按位取反后+1,也就是原来最低的连续的一段 会疯狂进位直到遇到第一个 ,和原数按位与一下就可以了。 highbit 最高的为 的二进制位
阅读全文
摘要:多项式入门教程 基础概念 形如 的东西叫多项式。 然后,这个 可以是无穷大的。 其中上面的 称为多项式的第 项系数。 多项式乘法 即各项相乘,假设有两个多项式 \(F(x)=\sum_{i
阅读全文
摘要:更新日志 Update 2022/6/26 增加了一个组合恒等式及其证明 Update 2022/6/27 增加了一个组合恒等式及其证明 组合数学 基础概念 加法和乘法原理 加法原理 同一步下的不同选择,可以通过累加得到方案数。 乘法原理 整个流程的方案数可以由每一步的方案数相乘得到。 有了加法原理
阅读全文
摘要:数论 概念基础 注:本文默认 为下取整的除法。 整除 定义:对于两个数 ,我们称 ,当且仅当存在一个 使得 。 这个运算有一些稍微值得被称为性质的性质,如下: 性质1 该运算具有传递性,即
阅读全文
摘要:多项式 形如 的式子叫做多项式。 我们称其最高次项的次数为该多项式的度,即 多项式操作 我们提前申明: \[ f(x)=\sum_{i=0}^{n}a_ix^i \\ g(x)=\sum_{i=0}^{m}b_ix^i
阅读全文
摘要:康托展开 可以用于求 全排列 的排名(字典序)。 我们先给定一组排列。这里为了举例方便就拿了 OI-wiki 上的例子 了。 我们第一位是 ,那么以 开头的就都比它小。后面的也是同理的搞法,就是看当前这位有多少个比它小还之前没有出现过的数(
阅读全文
摘要:素数判定 暴力 本质上是检查其是否能够不用其本身进行质因数分解。 直接枚举从区间 的数看其是否整除 即可。但是其实发现我们只要枚举到 即可,复杂度 。 inline bool prime(ll n){ for(int i=2;i*i
阅读全文
摘要:可参考资料: 资料1 资料2 实现如下: LL CRT(){ LL num=1,ans=0; for(int i=1;i<=n;++i) num*=a[i]; for(int i=1;i<=n;++i){ LL mum=num/a[i],x,y; exgcd(mum,a[i],x,y); ans=(
阅读全文
摘要:P1082 #include<bits/stdc++.h> using namespace std; #define file(a) freopen(#a".in","r",stdin),freopen(#a".out","w",stdout) int exgcd(int a,int b,int &
阅读全文
摘要:优秀资料 素数 这个很好写。我们可以很好的理解埃氏筛,然后加一些优化即可得到线性筛。 inline void get_pri(int n){ for(int i=2;i<=n;++i) not_pri[i]=0; not_pri[1]=1; for(int i=2;i<=n;++i){ if(!no
阅读全文
摘要:筛选素数 枚举每个数,并枚举它的倍数,给它的倍数打上非质数标记 用bitset存储标记会加速一倍,空间开销小一倍 { pri[1]=1; for(int i=2;i<=n;i++) { if(!pri[i]) { for(int j=2;i*j<=n;j++) { pri[i*j]=1; } } }
阅读全文
摘要:优点: 1.回带比原版高斯消元少,速度更快(一般情况下) 2.精度更好 3.代码实现更简单 代码如下:模板P3389 #include<bits/stdc++.h> using namespace std; #define file(a) freopen(#a".in","r",stdin),fre
阅读全文
摘要:前置知识 矩阵乘法 矩乘快速幂 领接矩阵k次方的意义 因为我不知道怎么证明这个,就直接告诉你,若 是一个领接矩阵,那么 的意义为点 i,到达点 j 长度为 k 的路径数量。 是不是看着就觉得很好用 但是很显然 k 比较大的时候我们不可能一层一层乘上去。所以
阅读全文
摘要:封装一个矩阵,带乘法,加法和清空 struct matrix { int n,m; long long a[N][N]; friend matrix operator * (matrix x,matrix y) { matrix c; c.n=x.n;c.m=y.m; c.clear(0); for
阅读全文