数学基础

数学基础


  1. 筛法
  • 埃氏筛 \(O(n\log \log n)\)
    注意剪枝。
prime[++cnt]=2;
for(int i=3;i<=n;i+=2) {
  if(v[i]) continue;
  prime[++cnt]=i;
  for(int j=i*i;j<=n;j+=i*2) v[j]=1;
} 
  • 线性筛 \(O(n)\)。可以同时记录最小质因子做到 \(O(\log n)\) 分解质因数。
void euler() {
	v[1]=v[0]=1;
	for(int i=2;i<N;i++) {
		if(!v[i]) prime[++cnt]=i;
		for(int j=1;j<=cnt&&prime[j]*i<N;j++) {
			v[i*prime[j]]=1;
			if(i%prime[j]==0) break;
		}
	}
}
  • 线性筛筛积性函数。

欧拉函数 \(\varphi\)

void euler() {
	v[1]=v[0]=1;phi[1]=1;
	for(int i=2;i<=n;i++) {
		if(!v[i]) prime[++cnt]=i,phi[i]=i-1;
		for(int j=1;j<=cnt&&prime[j]*i<=n;j++) {
			v[i*prime[j]]=1;
			if(i%prime[j]==0) {
				phi[i*prime[j]]=phi[i]*prime[j];
				break;
			}
			phi[i*prime[j]]=phi[i]*(prime[j]-1);
		}
	}
}

约数个数函数 \(\ d\)

void euler() {
	v[1]=v[0]=1;d[1]=1,f[1]=1;
	for(int i=2;i<=n;i++) {
		if(!v[i]) prime[++cnt]=i,d[i]=2,f[i]=1;
		for(int j=1;j<=cnt&&prime[j]*i<=n;j++) {
			v[i*prime[j]]=1;
			if(i%prime[j]==0) {
				f[i*prime[j]]=f[i]+1;
				d[i*prime[j]]=d[i]/f[i*prime[j]]*(f[i*prime[j]]+1);
				break;
			}
			f[i*prime[j]]=1;
			d[i*prime[j]]=d[i]*d[prime[j]];
		}
	}
}

tricks:

\(\gcd\) 具有可并性,可用 st 表维护。

不断加数 \(\gcd\) 个数不超过 \(\log\)

可以进行拆位,对每一位 \(\min\)

2.同余

  • 同余方程:扩欧可求 \(ax+by=\gcd(a,b)\) 的一组可行解,(记得乘回 \(c/ \gcd(a,b)\)) ,一解可得任意解,由此可求同余方程 \(ax\equiv 1\pmod b\) 解。通解为 \(x+b\times k,k\in z\)
void exgcd(int a,int b,ll &x,ll &y) {
	if(!b) return x=1,y=0,void();
	exgcd(b,a%b,y,x),y-=a/b*x;
}
  • 线性逆元:
inv[1]=1;
for(int i=2;i<=n;i++) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
  • 线性阶乘逆元:
fac[0]=1;
for(int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i;
inv[n]=q_pow(fac[n],mod-2);
for(int i=n-1;~i;i--) inv[i]=1ll*inv[i+1]*(i+1)%mod;
  • 同余方程组:

中国剩余定理 CRT,求解模数互质的同余方程组。
1.对于第 \(i\) 个方程,得到除它以外方程的模数积 \(m_i\),对于它自身模数求逆得到 \(x\)\(ans+=x\times m_i \times a_i\)\(a_i\) 为第 \(i\) 组方程的余数。

void crt() {
	ll M=1;
	for(int i=1;i<=n;i++) M*=a[i];
	for(int i=1;i<=n;i++) {
		ll m=M/a[i];
		exgcd(m,a[i],x,y);
		x=(x%a[i]+a[i])%a[i];
		ans+=b[i]*m*x;
	}
	ans=(ans%M+M)%M;
}
  • 费马小定理:对于 \(p\in prime\&\gcd(a,p)=1\),有 \(a^{p-1}\equiv 1\pmod p\) . 可用于求解逆元。
    推论:对于 \(p \in prime,a^p\equiv x\pmod p\),我们可以对于指数进行对 \(\pmod {p-1}\),对底数进行 \(\pmod p\)

  • 威尔逊定理:\(p\) 为素数 \(\Leftrightarrow\) \((p-1)!\equiv -1\pmod p\).

  • 欧拉定理:\(\gcd(a,m)=1时\)\(a^{\varphi(m)}\equiv1 \pmod p\).

3.组合计数

  • 求组合数

线性求阶乘逆元后套公式,对比递推优势显然。

int C(int n,int m) {
	return 1ll*fac[n]*inv[n-m]%mod*inv[m]%mod;
}

模数小,\(n,m\) 较大,\(p\) 较小可用 Lucas 定理。

\[\binom n m\equiv \binom {n/p} {m/p} \times \binom {n\%p} {m\%p} \pmod p \]

int lucas(int n,int m) {
   if(!m) return 1;
   return 1ll*C(n%mod,m%mod)*lucas(n/mod,m/mod)%mod;
}
  • 组合等式
  1. 二项式定理:\((a+b)^n=\sum \binom n i a^ib^{n-i}\) , \((\sum^t x_i)^n=\sum \binom n {n_1,n_2,...,n_t} \prod^t x_i^{n_i}\)

  2. 组合数带权和:

    \[\sum i\binom n i=n2^{n-1} \]

  3. 杨辉三角递推

  • 应用
  1. \(k\) 个正整数相加等于 \(n\) 的可行解:$ \binom {k-1} {n-1} \(。 \)\rightarrow$ 非负整数解 ? \(x_i\geq a_i\) ?映射 \(y_i=x-a_i+1\)。转化即可。

  2. 不相邻组合:n个相同物品选k个不相邻的= \(\binom {n-k+1} k\) ,理解为先拿出 \(k-1\) 个,任意选,然后再两两之间插球。

  3. 可重集排列数:元素总数阶乘 \(/\)重复度阶乘积

    可重集组合数:考虑容斥。枚举哪些数选完,\(ans=\sum _{p=0}^k(-1)^p\sum_{|A|=p} \binom {k+r-1-p-\sum {A_i+1}} {k-1}\)

  4. 卡特兰数:

    \[H_n=\sum H_{i-1}H_{n-i}=\frac {H_{n-1}(4n-2)} {n+1}=\frac {\binom {2n} n} {n+1}=\binom {2n} n -\binom {2n} {n-1} \]

    ​ 含义:① \(n\)\(1\)\(n\)\(-1\) 排列使得无负前缀的方案数、② \(n\times n\) 网格从左下到右上且不穿对角线的非降路径数、③ 圆上 \(2n\) 个点划 \(n\) 条线段不交的方案数、④ \(n+2\) 个点的凸多边形三角剖分方案数、⑤ 长为 \(n\) 的出栈序列数量、⑥ \(n\) 个点的二叉树形态数。

  5. 十二重计数法:

    1. 球不同盒不同:\(m^n\)
    2. 球不同盒不同无空:\(\sum^m (-1)^i\binom m i (m-i)^n\) _(容斥,枚举空盒数量)
    3. 球不同盒同:\(\sum^m {n \brace i}\)
    4. 球不同盒同无空:\({n \brace m}\)
    5. 球同盒不同:\(\binom {n+m-1} {m-1}\)
    6. 球同盒不同非空:\(\binom {n-1} {m-1}\)
    7. 球同盒同:DP,\(F_{n,m}=F_{n-m,m}[n>=m]+F_{n,m-1}\),考虑全部+1或添0即可。有空盒或没空盒。
    8. 球同盒同非空:\(F_{n-m,m}\)
      后面多项式的不会。
  6. 错排:

\(D_n=(n-1)(D_{n-1}+D_{n-2})=nD_{n-1}+(-1)^n=n!\sum \frac {(-1)^i} {i!}\)。考虑前面 \(n-1\) 个全部装错和只有一个装错的情况。其他情况不可能通过一步达到错排。

  1. 圆排列:\((n-1)!\) ,考虑任何一种普通排列都有 \(n\) 种等价圆排列。

  2. 几何意义:\(\binom {n+m} n\) 即从原点 \((0,0)\)\((n,m)\) 规定只能向上,向右走的方案数。

4.矩阵乘法:

  1. 具有结合律没有交换律,可以做快速幂,可以循环展开优化常数。
  2. 加速递推、作为表达修改的tag
  3. 定长路径统计:定长路径数量即做k次邻接矩阵的矩乘,定长最短路即做k次邻接矩阵的floyd,若统计的是 \(\leq\) 加上自环即可。
posted @ 2026-07-12 00:31  Bulyly  阅读(27)  评论(0)    收藏  举报