简单数学
排列组合
排列数 \(A_n^m\) 表示从 \(n\) 个数里选出 \(m\) 个的方案数。
组合数 \(C_n^m\) 表示从 \(n\) 个里面选出 \(m\) 个,不考虑顺序的方案数,也写作 \(\binom{n}{m}\)
\(A_n^m=\prod\limits_{i=n-m+1}^{n} i=\frac{n!}{(n-m)!}\)
\(C_n^m=\frac{A_n^m}{m!}=\frac{n!}{(n-m)!m!}\)
一些性质:
\(C_n^m=C_n^{n-m}\)
\(C_n^m=C_{n-1}^m+C_{n-1}^{m-1}\) (当成 \(\mathrm{dp}\) 来理解)
\(mC_n^m=nC_{n-1}^{m-1}\)
-
证明:
\[mC_n^m=\frac{n!}{m!(n-m)!}\times m \\ =\frac{n!}{(m-1)!(n-m)!}\\ =\frac{(n-1)!\times n}{(m-1)!(n-m)!}\\ =n\times \frac{(n-1)!}{(m-1)!(n-1-(m-1))!}\\ =nC_{n-1}^{m-1} \]
隔板法:
-
将 \(n\) 个完全相同的元素分成 \(k\) 组,要求每组非空。
可以看成在元素之间放板子,既然是非空,那就相当于在能放板子的 \(n-1\) 处,选出 \(k-1\) 的方案数,即\(\binom{n-1}{k-1}\)。(相当于在每个数之间放板子,选择 \(k-1\) 个的方案数。
-
将 \(n\) 个完全相同的元素分成 \(k\) 组,允许每组为空。
可以加上 \(k\) 个元素,在这 \(k\) 个新加的元素间插入的板子视为空的情况,则方案数为\(\binom{n+k-1}{k-1}\)
二项式定理
证明:
考虑用数学归纳法(首先证明在\(n=1\) 成立,再假设 \(n=m\) 时成立,推导出 \(n=m+1\) 时也成立),及\(\binom{m}{i}+\binom{m}{i-1}=\binom{m+1}{i}\)。
当 \(n=1\) 时,则
假设在 \(n=m\) 时成立。
设 \(n=m+1\) , 则有
令 \(j=i-1\) , 则 \(1\le i\le m+1\)
\((a+b)^{m+1}=\sum\limits_{i=0}^{m+1}\binom{m+1}{i}a^{m+1-i}b^i\) 得证。
扩展为多项式的形式 :
设 \(n\) 为正整数,\(x_i\) 为实数,
\(\binom{n}{n_1,n_2,\dots n_t}\)是多项式系数,性质很相似 \(\sum\binom{n}{n_1,n_2,\dots n_t}=t^n\)
容斥原理
给出 \(n\) 个条件,要求满足其中某个条件的方案数。
考虑枚举一个条件集合 \(T\),要求其中的条件都要满足,设方案数为 \(F(T)\),则原方案数为 \(\sum_{\left |T\right |>0}F(T) (-1)^{\left | T\right |-1}\)。
所有条件都不满足的方案数为 \(\sum_T F(T)(-1)^{\left|T\right |}\)
证明:
对于恰好满足 \(n\) 个条件中的 \(m(m>0)\) 个的方案。
被计算到的次数为 \(N=\sum_{i=1}^m (-1)^{i-1}\)
有 \(\sum_{i=0}^m\binom{m}{i}(-1)^i=0\)
则 \(1+(-N) =0,N=1\) 。
苏神的解释:
sym 17:38:35
N的柿子不就是容斥原理的那个柿子吗sym 17:38:47
奇正偶负sym 17:38:53
然后下面那个式子sym 17:39:15
就是C(m,0)-C(m,1)+C(m,2).... = 0那个柿子sym 17:39:27
然后你把i=0那一项提出来sym 17:39:32
那一项 = 1sym 17:39:53
剩下的你发现每一项都和 N 的计算式相反sym 17:39:58
那么也就是 -Nsym 17:40:01
那么1-N = 0sym 17:40:02
N = 1
素数及筛法
- 埃式筛
原理:素数的倍数一定不是素数。
复杂度接近线性,但会有重复筛的情况,\(eg\):12(到2、3、4、6时都会被筛。
Code:
for(int i=2;i<=n;++i)
if(isprime[i]){
for(int j=i+2;j<=n;j+=i)
isprime[j]=0;
}
- 线性筛
由于埃氏筛会被多次筛,考虑优化。可以让每个数被自己最小质因数筛掉。
code:
memset(isprime , 1 , sizeof isprime);
isprime[1] = 0;
for(re int i=2;i<=n;i++)
{
if(isprime[i]) prime[++cnt] = i;
for(re int j=1;j<=cnt && i*prime[j]<=n;j++)
{
isprime[i*prime[j]] = 0;
if(i % prime[j] == 0) break;//prime[j]为i的因子,再往后的话prime[j+...]就不为最小质因子了。
}
}
复杂度是 \(O(n)\) 的。
\(\mathrm{gcd}\&\mathrm{lcm}\)
\(\gcd(a,b)\) 又用 \((a,b)\) 表示。
\(\mathrm{lcm}(a,b)\) 用 \([a,b]\) 表示。
欧几里得算法
\(\forall a,b \in N\) , \(b \not= 0\) , \(\gcd(b,a \%b)\)
即
证明:
若 \(a<b\) , 则 \(gcd(b,a\%b)=\gcd(b,a)\) 成立;
若 \(a \ge b\) ,设 \(a=qb+r(0\le r <b)\) , \(r=a\%b\) ,对于 \(a,b\) 的任意公约数 \(d\) , \(d\mid a\) , \(d\mid qb\) , 所以\(d \mid (a-qb)\),即 \(d\mid r\)。故 \(a,b\) 的公约数集合与\(b,a%b\)的公约数集合相同。最大公约数自然也相等。
扩展欧几里得算法
求 \(ax+by= \gcd(a,b)\) 的一组整数解。
求解
- 构造特解
当 \(b= 0\) , \(ax+by=a\) , 因此 \(x=1\) , \(y=0\)
当 \(b\not= 0\)时,
对比等式两端,有 \(x=y_1\),\(y=x_1-\left \lfloor \frac{a}{b} \right \rfloor y_1\),递归计算即可。
递归边界即当 b=0 时,根据辗转相除法,a=d。此时 \(x=1\),\(y=0\) 即为一组解。
上述过程即扩展欧几里得算法,时间复杂度是辗转相除的 \(\log V\)。代码如下。
void exgcd(int a, int b, int &x, int &y) {
if(!b) return x = 1, y = 0, void();
exgcd(b, a % b, y, x), y -= a / b * x;
}
注意,扩欧(exgcd)求得的解为 \(ax+by=d\) 的一组特解。为求得原方程 \(ax+by=c\) 的一组特解,还需将 $ x,y$ 乘以 \(cd\)。
2.构造通解
显然,不定方程 \(ax+by=c\)若有解,则存在无穷解。我们需要通解的表示形式。
扩欧可以求得一组特解 \(x0,y0\)。根据\(\Delta(ax)+Δ(by)=0\),设 \(Δ=|Δ(ax)|=|Δ(by)|\),那么 \(a,b∣Δ\),故 \(\mathrm{lcm}(a,b)∣Δ\)。因此 \(|Δx|\) 是 $\frac{lcm(a,b)}{a}=\frac{b}{d} $ 的倍数,\(|Δy|\) 同理。
故通解形如
\(\left\{\begin{matrix} x=x_0 + \frac{b}{d} \\ y=b + r\text{sin}\theta \\ \end{matrix}\right.\) \((k\in Z)\)
积性函数
数论函数:定义域为整数的函数。
(\(\perp\):互质)
对于一个数论函数 \(f\) , 若 \(\forall a\perp b\) , \(f(ab)=f(a)f(b)\),则称 \(f\) 为积性函数;
若 \(\forall a,b \in Z\) ,\(f(ab)=f(a)f(b)\),则称 \(f\) 为完全积性函数。
裴蜀定理
若 \(a,b\) 是整数,且 \(\gcd(a,b)=d\),对于任意的整数 \(x,y,ax+by\) 都一定是 \(d\) 的倍数。
一定存在 \(x,y\) 使得 \(ax+by=\gcd(a,b)\) 成立。
费马小定理
若 \(p\) 为质数,\(\gcd(a,p)=1\) , 则 \(a^{p-1}\equiv 1(\bmod\) \(p)\)
另一个形式:对于任意整数 \(a\) , 有 \(a^p \equiv a(\bmod\) \(p)\)
乘法逆元
如果一个线性同余方程 \(ax\equiv 1(\mod b)\),则 \(x\) 称为 \(a\mod b\) 的逆元,记作 \(a^{-1}\)。
-
由于若存在整数 \(a,b\),则必然存在 \(ax+by=\gcd(a,b)\)。
\(ax\equiv 1(\mod b)\Rightarrow ax+by=1\)
则 \(\gcd(a,b)=1\) 。
即利用扩展欧几里得对 \(\gcd(a,b)\) 求解即可。
-
快速幂
要用到费马小定理。
因为 \(ax\equiv 1(\mod b)\),根据费马小定理得:
\(a\cdot a^{b-2}\equiv 1(\mod b)\),所以 \(x=a^{b-2}\),利用快速幂求得即可。
code:
int qpow(long long x,int y){ int ans=1; x=(x%p+p)%p; while(y) { if(y&1) { ans=(ans*x)%p; } x=(x*x)%p; y>>=1; } return ans; } -
线性求逆元
先给出结论:$\mathrm{inv}(i)=-\lfloor \frac{p}{i}\rfloor \times \mathrm{inv}(p%i)%p $。
证明:
设 \(p=k\times i+r,(k,r\in Z)\)
\[\because p\equiv 0(\mod p)\\ \therefore (k\times i+r)\equiv 0(\mod p) \]两边同乘 \(\mathrm{inv}(i)\times \mathrm{inv}(r)\) 得:
\[k\times \mathrm{inv}(i)\times i \times \mathrm{inv}(r) +\mathrm{inv}(i)\times\mathrm{inv}(r)\times r\equiv 0(\mod p)\\ \because \mathrm{inv}(i)\times i=1,\mathrm{inv}(r)\times r=1\\ \therefore k\times 1\times inv(r)+inv(i)\times 1\equiv0(\mod p)\\ \therefore inv(i)\equiv -k\times inv(r) (\mod p)\\ \therefore inv(i)=-k\times inv(r)\%p\\ 又\because p=k\times i+r\\ \therefore inv(i)=-\lfloor\frac{p}{i}\rfloor\times inv(p\%i)\%p\\ 又\because p\%i <i\\ \]则 \(inv(p\%i)\) 在 \(inv(i)\) 前就已求出。
原式得证。
若要求最小整数解,则使 \(-\lfloor \frac{p}{i} \rfloor\) 前加上 \(p\) 然后再 \(\%\) 掉即可。
即为 \(\mathrm{inv}(i)=(p-\lfloor \frac{p}{i} \rfloor) \times \mathrm{inv}(p\%i)%p\) 。
CRT
求解形如(其中 \(n_1,n_2,\dots ,n_k\) 两两互质):
过程:
- 计算所有模数的积 \(n\);
- 对于第 \(i\) 个方程:
- 计算 \(m_i=\frac{n}{n_i}\);
- 计算 \(m_i\) 在模 \(n_i\) 意义下的逆元 \(m_i^{-1}\);
- 计算 \(c_i=m_im_i^{-1}\) (不要对 \(n_i\) 取模;
- 方程组在模 \(n\) 意义下的唯一解是: \(x=\sum_{i=1}^k a_i c_i\)。
威尔逊定理
\(p\) 是质数当且仅当 \((p-1)!\equiv -1(\mod p)\)
证明:
必要:若 \(p\) 是质数,除了 \(p-1\) 的逆元是自己外,剩下的都两两抵消。
充分:若 \(p\) 不是质数,则 \(\gcd((p-1)!,p)>1\) ,矛盾。
欧拉函数
\(\varphi(n)\)(即欧拉函数):1~\(n\) 中有多少数和 \(n\) 互质。
对于质数 \(p\) , \(\phi(p)=p-1\)
定理:若 \(n=p_1^{r_1}p_2^{r_2}...p_s^{r_s}\)
则:\(\phi(n)=n(1-\frac{1}{p_1})(1-\frac{1}{p2})...(1-\frac{1}{p_s})\)
证明:\(\phi(n)=\prod\limits_{i=1}^S\phi(p_i^{r_i})\)
\(=\prod\limits_{i=1}^Sp_i^{r_i-1}(p_i-1)\)
\(=\prod\limits_{i=1}^Sp_i^{r_i}-p_i^{r_i-1}\)
\(=\prod\limits_{i=1}^Sp_i^{r_i}(1-\frac{1}{p_i})\)
欧拉定理
如果\(\gcd(a,m)=1\) ,
则有\(a^{\varphi(m)}\equiv1\pmod{m}\) 。
设 \(S={p_1,p_2,⋯,p_{φ(p)}}\) 为 \(p\) 的简化剩余系,即所有与 \(p\) 互质且模 \(p\) 互不相同的数组成的集合。对于任意 \(pi,pj\),若 \(i≠j\),则根据上述分析,\(ap_i\) 与 \(ap_j\) 在模 \(p\) 意义下的余数不相等且仍与 \(p\) 互质。
因此在模 \(p\) 意义下,\(S\) 中每个数乘以 \(a\) 后仍与 \(S\) 相等。故 \(∏_{i=1}^{φ(p)}pi≡∏{i=1}^{φ(p)}ap_i(\bmod p)\)。显然 $\prod_{p_i}\perp p $。等式两边同时除以 \(∏\limits_{i=1}^{φ(p)}pi\) 得到:
\(a^{φ(p)}≡1(\bmod p)\)
在计算与模数互质的某个数的幂时,指数可以对模数的欧拉函数取模。可以用来化简公式或减小常数(前提是模数是定值或其欧拉函数容易求得)。
试除法求 \(\varphi(n)\) :
int get_phi(int n){
int ans=n;
for(int i=2;i*i<=n;i++)
if(n%i==0){
ans=ans/i*(i-1);
while(n%i==0)
n/=i;
}
if(n!=1) ans=ans/n*(n-1);
return ans;
}
线性筛欧拉函数
在线性筛中,每个合数 \(m\) 都是被 最小的质因子筛掉的。
设 \(p_j\) 是 \(m\) 的最小质因子,则 \(m\) 通过 \(m=p_j\times i\) 筛掉。
三种情况:
- 若 \(i\) 是质数,则\(\varphi(i)=i-1\)
- 若 \(i\) 能被 \(p_j\) 整除,也就说明 \(i\) 里至少包含着一个 \(p_j\),那么也就说明 \(p^2|(i\times p_j)\),得 \(\varphi(m)=p_j\times \varphi(i)\)
- 若 \(i\) 不能被 \(p_j\) 整除,也就说明 \(i\) 里不包含 \(p_j\) 也就说明 \(p^2\not \mid (i\times p_j)\),得 \(\varphi(m)=varphi(p_j)\times \varphi(i)=(p_j-1)\varphi(i)\)
code:
void get_phi(int x){
memset(isprime,1,sizeof(isprime));
isprime[1]=0;ph[1]=1;
for(int i=2;i<=x;++i){
if(isprime[i]) {
prime[++cnt]=i;
ph[i]=i-1;
}
for(int j=1;j<=cnt&&prime[j]*i<=x;++j) {
int m=prime[j]*i;
isprime[m]=0;
if(!i%prime[j]) {//condition 2
ph[m]=prime[i]*ph[i];
break;
}
else {
ph[m]=(prime[i]-1)*ph[i];
}
}
}
}
模 \(p\) 下除以 \(a\) = \(*ksm(a,p-2,p)\) // \(a^{p-2}\% p\)
模 \(m\) (任意数)下除以 \(a\) = \(*ksm(a,get-phi(m)-1,m)\)
例题:\(P1083\)
扩展欧拉定理
\(a^b\equiv \left\{\begin{matrix} a^{b\bmod \varphi(p)} \qquad \gcd(a,p)=1\\ a^b \qquad\gcd(a,p)\not=1,b<\varphi(p)\\ a^{b \bmod \varphi(p)+\varphi(p)} \qquad \gcd(a,p)\not=1,b\ge \varphi(p)\\ \end{matrix}\right.\)

浙公网安备 33010602011771号