简单数学

排列组合

排列数 \(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} \]

隔板法:

  1. \(n\) 个完全相同的元素分成 \(k\) 组,要求每组非空。

    可以看成在元素之间放板子,既然是非空,那就相当于在能放板子的 \(n-1\) 处,选出 \(k-1\) 的方案数,即\(\binom{n-1}{k-1}\)。(相当于在每个数之间放板子,选择 \(k-1\) 个的方案数。

  2. \(n\) 个完全相同的元素分成 \(k\) 组,允许每组为空。

    可以加上 \(k\) 个元素,在这 \(k\) 个新加的元素间插入的板子视为空的情况,则方案数为\(\binom{n+k-1}{k-1}\)

二项式定理

\[(a+b)^n=\sum\limits_{i=0}^{n}\binom{n}{i}a^ib^{n-i} \]

证明

考虑用数学归纳法(首先证明在\(n=1\) 成立,再假设 \(n=m\) 时成立,推导出 \(n=m+1\) 时也成立),及\(\binom{m}{i}+\binom{m}{i-1}=\binom{m+1}{i}\)

\(n=1\) 时,则

\[(a+b)^1=\sum\limits_{i=0}^1\binom{1}{i}a^{1-i}b^i\\ =\binom{1}{0}a^1b^0+\binom{1}{1}a^0b^1=a+b \]

假设在 \(n=m\) 时成立。

\(n=m+1\) , 则有

\[(a+b)^{m+1}=(a+b)^m\times(a+b)\\ =a(a+b)^m+b(a+b)^m\\ =a\sum\limits_{i=0}^{m}\binom{m}{i}a^{m-i}b^i+b\sum\limits_{j=0}^{m}\binom{m}{j}a^{m-j}b^j\\ =\sum\limits_{i=0}^m\binom{m}{i}a^{m-i+1}b^i+\sum\limits_{j=0}^m \binom{m}{j}a^{m-j}b^{j+1}\\ =\sum\limits_{i=0}^m\binom{m}{i}a^{m-i+1}b^i+\sum\limits_{j=0}^m \binom{m}{j}a^{m-j}b^{j+1}\\ \]

\(j=i-1\) , 则 \(1\le i\le m+1\)

\[=\sum\limits_{i=0}^m\binom{m}{i}a^{m-i+1}b^i+\sum\limits_{i=1}^{m+1} \binom{m}{i-1}a^{m+1-i}b^{i}\\ =a^{m+1}+b^{m+1}+\sum\limits_{i=0}^m \binom{m+1}{i}a^{m+1-i}b^i\\ =\sum\limits_{i=0}^{m+1}\binom{m+1}{i}a^{m+1-i}b^i \]

\((a+b)^{m+1}=\sum\limits_{i=0}^{m+1}\binom{m+1}{i}a^{m+1-i}b^i\) 得证。

扩展为多项式的形式 :

\(n\) 为正整数,\(x_i\) 为实数,

\[(x_1+x_2+\dots+x_t)^n=\\ \sum\limits_{(n_1\dots n_i :n_1+\dots+n_t=n)}\binom{n}{n_1,n_2,\dots n_t}x_1^{n_1}x_2^{n_2}\dots x_t^{n_t} \]

\(\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
那一项 = 1

sym 17:39:53
剩下的你发现每一项都和 N 的计算式相反

sym 17:39:58
那么也就是 -N

sym 17:40:01
那么1-N = 0

sym 17:40:02
N = 1

素数及筛法

  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;
    }
  1. 线性筛

由于埃氏筛会被多次筛,考虑优化。可以让每个数被自己最小质因数筛掉。

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)\)

\[\gcd (a,b)=\gcd(b,a\mod b)\\ \gcd(a,0)=a \]

证明:

\(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)\) 的一组整数解。

求解

  1. 构造特解

\(b= 0\) , \(ax+by=a\) , 因此 \(x=1\) , \(y=0\)

\(b\not= 0\)时,

\[\gcd(a,b)=ax+by\\ \gcd(b,a\%b)=bx_1+(a\%b)y_1\\ =bx_1+(a-\left \lfloor \frac{a}{b} \right \rfloor \times b)y_1\\ = ay_1+b(x_1-\left \lfloor \frac{a}{b} \right \rfloor y_1)\\ \because \gcd(a,b)=\gcd(b,a\%b)\\ \therefore x=y_1,y=x_1-\frac{a}{b}y_1 \]

对比等式两端,有 \(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}\)

  1. 由于若存在整数 \(a,b\),则必然存在 \(ax+by=\gcd(a,b)\)

    \(ax\equiv 1(\mod b)\Rightarrow ax+by=1\)

    \(\gcd(a,b)=1\)

    即利用扩展欧几里得对 \(\gcd(a,b)\) 求解即可。

  2. 快速幂

    要用到费马小定理。

    因为 \(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;
    }
    
  3. 线性求逆元

    先给出结论:$\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\) 两两互质):

\[\left\{\begin{matrix} x\equiv a_1 (\mod n1) \\ x\equiv a_2(\mod n2)\\ \vdots\\ x\equiv a_k(\mod n_k) \end{matrix}\right. \]

过程:

  1. 计算所有模数的积 \(n\)
  2. 对于第 \(i\) 个方程:
    1. 计算 \(m_i=\frac{n}{n_i}\)
    2. 计算 \(m_i\) 在模 \(n_i\) 意义下的逆元 \(m_i^{-1}\)
    3. 计算 \(c_i=m_im_i^{-1}\) (不要对 \(n_i\) 取模;
  3. 方程组在模 \(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\) 筛掉。

三种情况:

  1. \(i\) 是质数,则\(\varphi(i)=i-1\)
  2. \(i\) 能被 \(p_j\) 整除,也就说明 \(i\) 里至少包含着一个 \(p_j\),那么也就说明 \(p^2|(i\times p_j)\),得 \(\varphi(m)=p_j\times \varphi(i)\)
  3. \(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.\)

posted @ 2023-09-24 22:00  XYini  阅读(4)  评论(0)    收藏  举报