推荐阅读 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. mysql多对多查询 原生写法

    准备工作,1.创建表 CREATE TABLE IF NOT EXISTS `users` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `name` VARCHAR ...

  2. 5519: [Usaco2016 Open]Landscaping

    农夫约翰正在建造一个美丽的花园,在这个过程中需要移动大量的泥土.花园由N个花圃(1≤N≤100,000)组成,第i个花圃最开始有Ai个泥土. 农夫约翰想要重新整理花园,使每个花圃最后有Bi个泥土.Ai ...

  3. SQL复制远程数据库数据到本地-及查询结果少显示一列

    网上找了查询结果怎么少显示一列,因为数据很多列,结果不是视图就是嵌套,太麻烦,这里用临时表做 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB', '19 ...

  4. mysql压缩包安装相关过程命令

    mysqld --remove mysql57 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL目 ...

  5. python抓取往期双色球

    import requests import json,csv ''' http://m.zhcw.com/clienth5.do?lottery=FC_SSQ&pageSize=20& ...

  6. POJ-3468 A Simple Problem with Integers (区间求和,成段加减)

    You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of op ...

  7. Python时间模块datetime用法

    时间模块datetime是python内置模块,datetime是Python处理日期和时间的标准库. 1,导入时间模块 from datetime import datetime 2,实例 from ...

  8. 一些WinAPI 处理 字符的函数和连接(GetACP和SetThreadLocale最重要,还有SetConsoleCP)

    虽然东西都是现成的.但是也要脑子里有个概念. // 地区与语言GetACP 取得 ANSI code page,法语XP+设置中文内核 = 936 // ShowMessage(IntToStr(Ge ...

  9. VINS 估计器之外参初始化

    为何初始化外参 当外参完全不知道的时候,VINS也可以在线对其进行估计(rotation),先在processImage内进行初步估计,然后在后续优化时,会在optimize函数中再次优化. 如何初始 ...

  10. [书接上一回]在Oracle Enterprise Linux (v5.7) 中安装DB - (1/4)

    在上一回中,我们安装了OEL了,现在就要安装Oracle数据. 首先登录root用户,输入账号密码或,输入命令行:startx,启动图形界面. 先将虚拟机中插入光碟(Enterprise-R5-U7- ...