推荐阅读 NOIp 基础数论知识点总结: https://www.cnblogs.com/greyqz/p/number.html

排列组合

常用公式

排列:$$\displaystyle A_n^m=\frac{n!}{(n-m)!}$$

全排列:\(A_n^n=n!\)

组合:$$\displaystyle C_nm=\frac{A_nm}{m!}=\frac{n!}{m!(n-m)!}$$

组合数的性质:

\[\displaystyle C_n^m = C_n^{n-m}
\]

\[\displaystyle C_n^m= C_{n-1}^m+C_{n-1}^{m-1}
\]

推导:$$ \displaystyle \begin{aligned} C_n^m & = \frac{n!}{m!(n-m)!}\ & = \frac{(n-1)!}{m!(n-m-1)!}\times\frac{n}{n-m}\ & =\frac{(n-1)!}{m!(n-m-1)!}\times(1+\frac{m}{n-m})\ & =C_{n-1}^{m}+\frac{(n-1)!}{(m-1)!(n-m)!}\ & = C_{n-1}m+C_{n-1}{m-1}\end{aligned} $$

\[\displaystyle \sum_{i=0}^n C_n^i =\sum_{i=0}^nC_n^i1^{i}\cdot 1^{n-i}=(1 + 1)^n= 2^n
\]

二项式定理:$$\displaystyle (a+b)n=\sum_{i=0}n C_n^i a^i b^{n-i}$$

\[\displaystyle \sum_{i=0}^r C_{n+i}^i = C_{n+r+1}^r
\]

\[\displaystyle \sum_{i=0}^n i\cdot C_n^i =\sum_{i=1}^{n}n\cdot C_{n-1}^{i-1}=n\sum_{i=0}^{n-1}C_{n-1}^{i-1}= n2^{n-1}
\]

\[\displaystyle C_n^m\cdot C_m^r=C_n^r\cdot C_{n-r}^{m-r}
\]

\[\displaystyle C_n^0-C_n^1+C_n^2+\cdots +C_n^m=0
\]

组合数基本处理 \(O(n)\)

const int N = 1e5 + 7, MOD = 1e9 + 7;
int add(int a, int b) { if ((a += b) >= MOD) a -= MOD; return a; }
int mul(int a, int b) { return ll(a) * b % MOD; }
int C(int a, int b) { return mul(jc[a], mul(ijc[a - b], ijc[b])); }
int qpow(int a, int b) {
int r = 1;
for (; b; b >>= 1) {
if (b & 1) r = mul(r, a);
a = mul(a, a);
}
return a;
}
int jc[N], ijc[N];
void ini() {
jc[0] = 1; for (int i = 1; i < N; i++) jc[i] = mul(jc[i - 1], i);
ijc[N - 1] = qpow(jc[N - 1], MOD - 2);
for (int i = N - 2; i >= 0; i--) ijc[i] = mul(ijc[i + 1], i + 1);
}

Lucas 定理

对于正整数 \(n, m~ (n\ge m)\), 素数 \(p\), 令 \(n=n_kp_k+n_{k-1}p^{k-1}+\cdots+n_1p+n_0\), \(m=m_kp_k+m_{k-1}p^{k-1}+\cdots+m_1p+m_0\), 则

\[\displaystyle \binom{m}{n}\equiv \prod_{i=0}^k \binom{m_i}{n_i}\pmod p
\]

可变形为:

\[\displaystyle \binom{m}{n}\bmod p=\binom{\left\lfloor\frac{m}{p}\right\rfloor}{\left\lfloor\frac{n}{p}\right\rfloor}\cdot \binom{m\bmod p}{n\bmod p}\bmod p
\]

用 Lucas 定理可快速求解 \(C_n^m\bmod p\). 代码:

const int mod=10007;

int jc[mod], ijc[mod], T, n, m;

inline int lucas(int a, int b) {
if (a>b) return 0;
if (b<=mod) return jc[b]*ijc[a]%mod*ijc[b-a]%mod;
return lucas(a/mod, b/mod)*lucas(a%mod, b%mod)%mod;
} int main() {
jc[0]=jc[1]=ijc[0]=ijc[1]=1;
for (int i=2; i<mod; ++i)
jc[i]=jc[i-1]*i%mod, ijc[i]=(mod-mod/i)*ijc[mod%i]%mod;
for (int i=2; i<mod; ++i)
ijc[i]=ijc[i-1]*ijc[i]%mod;
for (scanf("%d", &T); T; --T)
scanf("%d%d", &n, &m), printf("%d\n", lucas(m, n));
return 0;
}

矩阵乘法

由 \(a_n=2a_{n-3}+a_{n-1}\) 得矩阵转移方程:

\[\begin{bmatrix} a_n & a_{n-1} & a_{n-2} \end{bmatrix} = \begin{pmatrix} 1 & 1 & 0 \\ 0 & 0 & 1 \\ 2 & 0 & 0 \end{pmatrix} \times \begin{bmatrix} a_{n-1} & a_{n-2} & a_{n-3} \end{bmatrix}
\]

这里采用 [] 表示 \(1\times 3\) 矩阵,() 表示 \(3\times 3\) 矩阵。

ll p[5][5], b[5][5], d[5][5], t[5][5];

memset(p, 0, sizeof p), memset(b, 0, sizeof b), memset(d, 0, sizeof d);
for (int i=1; i<=3; i++) b[i][i]=1ll; // unit matrix
p[1][1]=1ll, p[1][2]=1ll, p[1][3]=0ll;
p[2][1]=0ll, p[2][2]=0ll, p[2][3]=1ll;
p[3][1]=2ll, p[3][2]=0ll, p[3][3]=0ll; // transition matrix
d[1][1]=6ll, d[1][2]=1ll, d[1][3]=3ll; // initial matrix, a_3, a_2, a_1 // n<=3 特判
if (n<=3) {printf("%d\n", d[1][4-n]); return 0; } // 矩阵快速幂
int K=n-3;
while (K>0){
if (K&1) {
// (b) *= (p)
memset(t, 0, sizeof t);
for (int i=1; i<=3; i++)
for (int j=1; j<=3; j++)
for (int k=1; k<=3; k++)
t[i][j]=(t[i][j]+b[i][k]*p[k][j]) % mod;
memcpy(b, t, sizeof b);
} // (p) = (p)^2
memset(t, 0, sizeof t);
for (int i=1; i<=3; i++)
for (int j=1; j<=3; j++)
for (int k=1; k<=3; k++)
t[i][j]=(t[i][j]+p[i][k]*p[k][j]) % mod;
memcpy(p, t, sizeof p); K>>=1;
} // [t] = [d] * (b)
memset(t, 0, sizeof t);
for (int i=1; i<=3; i++)
for (int j=1; j<=3; j++)
t[1][i]=(t[1][i]+d[1][j]*b[j][i]) % mod;
printf("%lld\n", t[1][1]);

数学规律

Catalan 数

\[H_n=\displaystyle\frac{C_{2n}^n}{n+1}
\]

1, 1, 2, 5, 14, 42, 132, ...

以下问题属于 Catalan 数:

  1. 有 \(2n\) 个人排成一行进入剧场. 入场费 5 元. 其中只有\(n\)个人有一张 5 元钞票, 另外 \(n\) 人只有 10 元钞票, 剧院无其它钞票, 问有多少中方法使得只要有 10 元的人买票, 售票处就有 5 元的钞票找零?
  2. 一位大城市的律师在她住所以北 \(n\) 个街区和以东 \(n\) 个街区处工作. 每天她走 \(2n\) 个街区去上班. 如果他从不穿越(但可以碰到)从家到办公室的对角线, 那么有多少条可能的道路?
  3. 在圆上选择 \(2n\) 个点, 将这些点成对连接起来使得所得到的 \(n\) 条线段不相交的方法数?
  4. 对角线不相交的情况下, 将一个凸多边形区域分成三角形区域的方法数?
  5. 一个栈 (无穷大) 的进栈序列为 \(1,2,3, \ldots ,n\) 有多少个不同的出栈序列?
  6. \(n\) 个结点可够造多少个不同的二叉树?
  7. \(n\) 个不同的数依次进栈, 求不同的出栈结果的种数?
  8. \(n\) 个 \(+1\) 和 \(n\) 个 \(-1\) 构成 \(2n\) 项 \(a_1,a_2, \ldots ,a_{2n}\), 其部分和满足 \(a_1+a_2+ \cdots +a_k\ge 0\) \((k=1,2,3, \ldots ,2n)\), 该数列为?

ssoj1073:给定 \(0<p<q<100,p,q\in\mathbf{N}^*\), 求 \(\displaystyle\frac{H_q}{H_p}\).

解:令 \(q=p+x,x\in\mathbf{N}^*​\), 则

\[\displaystyle \frac{H_q}{H_p}=\frac{C_{2q}^q\cdot (p+1)}{C_{2p}^p\cdot (q+1)} =\frac{\displaystyle\frac{(2q)!}{(q!)^2}\cdot (p+1)}{\displaystyle\frac{(2p)!}{(p!)^2}\cdot (q+1)}=\frac{\displaystyle\frac{(2p+2x)!}{\big((p+x)!\big)^2}\cdot (p+1)}{\displaystyle\frac{(2p)!}{(p!)^2}\cdot (p+x+1)}=\frac{\displaystyle\prod_{i=2p+1}^{2q}{i}\cdot(p+1)}{\left(\displaystyle\prod_{i=p+1}^q{i}\right)^2 (q+1) }
\]

带入特殊值计算.

Stirling 数

(2007 普及)将 \(n\) 个数 \(1,2,\ldots,n\) 分成 \(r\) 个部分. 每个部分至少一个数. 将不同划分方法的总数记为 \(S_n^r\). 例如, \(S_4^2=7\), 这 7 种不同的划分方法依次为 \(\{(1) , (234) \},\{(2) , (134) \},\{(3) , (124) \},\{ (4) , (123) \},\{ (12) , (34) \},\{ (13) , (24) \},\{ (14) , (23) \}\). 当 \(n=6, r=3\) 时, \(S_6^3=\)( )

\[S_n^m = m S_{n-1}^{m} + S_{n-1}^{m-1}
\]

\[S_n^1 = 1,S_n^0 = 0,S_n^n = 1
\]

NOIp 数学知识点总结的更多相关文章

  1. NOIP初赛知识点大全-普及+提高组

    NOIP初赛知识点大全-普及+提高组 https://mp.weixin.qq.com/s/vSXLDxmbBoFfZPzD8lrt3w

  2. Noip数学整理

    目录 Noip数学整理 序 1 取模相关 2 质数相关 3.基本操作 4.方程相关 5.数列相关 6.函数相关 Noip数学整理 序 因为某些原因, Noip对于数学方面的考纲仅停留在比较小的一部分, ...

  3. 史上最全NOIP初赛知识点

    CSP-J/S 第一轮知识点选讲 \(NOIP\)(全国青少年信息学奥林匹克竞赛)于2019年取消.取而代之的是由\(CCF\)推出的非专业级软件能力认证,也就是现在的\(CSP-J/S\).作为一名 ...

  4. Contest2158 - 2019-3-14 高一noip基础知识点 测试3 题解版

    传送门 预计得分:0 实际得分:90 还行 T1 数学卡精 二分double卡精 反正就是卡精 怎么办?卡回去!! 将double*=1e4,变成一个long long 注意四舍五入的奇技淫巧 代码 ...

  5. NOIP初赛知识点

    http://www.doc88.com/p-9982181637642.html 连载中…… (一)八大排序算法 下面这张表摘自博客http://blog.csdn.net/whuslei/arti ...

  6. [Noip复习知识点][个人向]Zackzh

    只是列列一些要复习的,努力复习吧,有种noip退役的赶脚. 一.模拟 (这你也不会?退役吧) 二.DP 1.基础dp 2.区间dp 3.状压dp 4.树形dp 6.概率(期望)dp 7.环形dp 8. ...

  7. NOIP考前知识点整理

    前言:距离NOIP还有不到一百天(虽然NOIP没了),为了整理一下所学的内容,才有了这篇博文.本文内容无特殊说明全部来自于博主的博客,代码也都是新敲的,努力在个人的码风基础上做到尽量简洁,求资瓷. 一 ...

  8. Contest2195 - 2019-4-25 高一noip基础知识点 测试8 题解版

    (因为david_alwal太懒了,所以本期题解作者为Th Au K,码风不同请自行适应) 传送门 T1 BFS?贪心?我也说不清 反正就是对每一个“#”搜一下他的旁边有没有“#”就行了 代码 T2 ...

  9. Contest2178 - 2019-4-18 高一noip基础知识点 测试7 题解版

    刚刚改完题,才有时间发题解 传送门 T1 exgcd裸题 对a,b跑exgcd,答案就是x*c/gcd(a,b),y*c/gcd(a,b) 不合法的情况:当且仅当c%gcd(a,b)!=0 代码 T2 ...

随机推荐

  1. Nginx 日志切割(Logrotate)

    Logrotate 配置文件 # ls /etc/logrotate.* /etc/logrotate.conf /etc/logrotate.d: cups dracut fmdcn httpd i ...

  2. Jmeter的中英文互换

    1.jmeter的中英文互换:为了更深入的了解Jmeter,一般使用英文版的jmeter. 旧版本下载的默认中文较多.新版本5.1的下载后默认英文比较的多. 方法一: 选项->选择一种语言,但是 ...

  3. 东软、天健、金仕达、杭创、中联、NECHIS、军字一号 HIS产品的比较

    HIS主流厂商产品介绍1.沈阳东软医疗系统有限公司创立于1998年公司是中国目前最大的软件集团——东软集团为技术和资源依托,以研制生产大型医疗设备为主,同时为医院数字化提供全面解决方案.但是,公司改制 ...

  4. 如何判断一段程序是由C 编译程序还是由C++编译程序编译的

    以下是在论坛中看到的两种解释: (1)如果是要你的代码在编译时发现编译器类型,就判断_cplusplus或_STDC_宏,通常许多编译器还有其他编译标志宏, #ifdef __cplusplus co ...

  5. Makefile project

    1 Makefile里出现IDF_PATH,所以要在工程属性里的environment环境变量添加IDF_PATH,对其解释,指出路径. 2  项目中用了shell文本,如果用Python 语言,要确 ...

  6. HDU 6538 Neko and quadrilateral(极角排序+旋转坐标系)

    这道题简直太好了,对于计算几何选手需要掌握的一个方法. 首先对于求解四边形面积,我们可以将四边形按对角线划分成两个三角形,显然此时四边形的面积最大最小值就变成了求解里这个对角线最近最远的点对. 对于此 ...

  7. postgresql 口令: psql: 致命错误: 用户 认证失败

    在Windows环境下使用psql 命令出现认证失败. 网上找了很多,都没讲到要点 D:\program\PostgreSql\bin>psql口令: psql: 致命错误: 用户 " ...

  8. ubuntu18+virtualenv配置

    思路: 1.两条命令安装,加sudo是安装在/usr/local/bin/virtualenv路径下,不加就安装在home/.local下.注意,后面bashrc里,要设置的路径和这个有关系,所以要区 ...

  9. 谈Apache OFbiz 会员模块表结构设计

    数据库表的结构设计可谓是ofbiz除技术框架之外,另一个非常值得学习的方向.这篇文章我们来谈谈ofbiz对电子商务会员表的设计. PARTY ofbiz对人.团体进行了抽象,称之为party,翻译为中 ...

  10. SpringBoot中设置自定义拦截器

    SpringBoot中设置自动以拦截器需要写一个类继承HandlerInterceptorAdapter并重写preHandle方法 例子 public class AuthorityIntercep ...