数学基础

绝顶我为峰

2021-06-15 20:39:14

Personal

# 数学基础 ## 1.基本定理 - **定理1:若 $p\in prime,p\nmid a$,则 $p\mid ab$ 的充要条件是 $p\mid b$。** 更一般地,若 $\gcd(p,a)=1$,则 $p\mid ab$ 的充要条件是 $p\mid b$。 证明:显然。 - **定理2(裴蜀定理):$ax+by=n$ 有整数解的充要条件是 $\gcd(a,b)\mid n$。** 证明:令 $\gcd(a,b)=d$。 必要性:假设有整数解,显然 $d\mid ax,d\mid by$,因此有 $d\mid n$。 充分性:两边同时除以 $d$,得 $\frac a d x+\frac b d y=\frac n d$。显然有 $\gcd(\frac a d,\frac b d)=1$,根据欧几里得算法,此时一定有 $x,y$ 使得 $\frac a d x+\frac b d y=1$,再放缩一定可以找到合法解。 得证。 例题:[【模板】裴蜀定理](https://www.luogu.com.cn/problem/P4549) - **定理3:若 $a,b>0,\gcd(a,b)=1$,那么所有大于 $ab-a-b$ 的数都可以写成 $ax+by(x,y\geq0)$ 的形式,但 $ab-a-b$ 不能。** 证明:我们要证明 $ax+by=ab-a-b$ 无整数解,而 $ax+by=ab-a-b+k(k>0)$ 均有解。 $ax+by=ab-a-b$ $a(x+1)+b(y+1)=ab$ 有 $a\mid y+1$ 则 $y+1\geq a,b(y+1)\geq ab$ 因为 $a(x+1)\geq 1$ 所以 $a(x+1)+b(y+1)\geq ab+1> ab$ 所以无解。 $ax+by=ab-a-b+k$ $a(x+1)+b(y+1)=ab+k$ 令 $x'=x+1,y'=y+1$ 由定理2得该不定方程一定有整数解,假设存在一组解 $x'=x_0,y'=y_0$ 那么一组解可以写成 $x'=x_0-bt,y'=y_0+at$ 显然可以钦定一个 $t$ 使得 $1\leq x'\leq b$,那么 $0\leq x\leq b-1$ 此时 $a\leq ax'\leq ab$,则 $by'$ 是正数,所以 $y'\geq 1$,即 $y\geq 0$。所以一定存在合法解。 得证。 例题:[[NOIP2017 提高组] 小凯的疑惑](https://www.luogu.com.cn/problem/P3951) 完全一致。 ## 2.同余 ### 运算 加减:直接算。 乘:直接乘,但是可能会导致同余弱化。 除:不能直接除,但如果 $ka\equiv kb(mod\ m),\gcd(k,m)=1$,那么 $a\equiv b(mod\ m)$ ### 完系与缩系 完系:$m$ 个剩余类每个取一个代表元,$m$ 的一个完系是 $0\sim m-1$。 缩系(简化剩余系):与 $m$ 互质的等价类中取一个代表元,如 $6$ 的一个缩系是 $1,5$, $7$ 的一个缩系是 $1,2,3,4,5,6$。 ### 欧拉函数与欧拉定理 欧拉函数:定义 $\varphi(m)$ 为模 $m$ 意义下缩系大小,显然有 $\varphi(m)=m-1(m\in prime)$。 欧拉函数求法:若 $m=\prod_{i=1}^na_i^{p_i}$,则 $\varphi(m)=m\prod_{i=1}^n1-\frac 1 {p_i}=\prod_{i=1}^n(p_i-1)p_i^{a_i-1}$。 **定理:$\sum_{d\mid m}\varphi(d)=m$** **引理:若 $a_1,a_2,\dots,a_{\varphi(m)}$ 是缩系且 $\gcd(k,m)=1$,那么 $ka_1,ka_2,\dots ,ka_{\varphi(m)}$ 也是缩系。** 证明:假设变换后不是缩系,那么 $\exists 1\leq i<j\leq \varphi(m),ka_i\equiv ka_j(mod\ m)$ 因为 $\gcd(k,m)=1$,所以 $a_i\equiv a_j(mod\ m)$。根据缩系定义,这不可能出现,所以矛盾。 得证。 **欧拉定理:若 $\gcd(k,m)=1$,则 $k^{\varphi(m)}\equiv 1(mod\ m)$。** 证明:设模 $m$ 意义下一个缩系为 $a_1,a_2,\dots ,a_{\varphi(m)}$,那么 $ka_1,ka_2,\dots,ka_{\varphi(m)}$ 也是缩系。 由于缩系中每个元素模 $m$ 后分别对应一个与 $m$ 互质的剩余类,而互质剩余类不会改变,所以对两个缩系做连乘,有 $k^{\varphi(m)}\prod_{i=1}^{\varphi(m)}a_i\equiv \prod_{i=1}^{\varphi(m)}a_i(mod\ m)$。 根据定义,显然 $\gcd(\prod_{i=1}^{\varphi(m)}a_i,m)=1$,由同余除法性质可得 $k^{\varphi(m)}\equiv 1(mod\ m)$。 得证。 **推论:对于任意 $k,m$,有 $k^m\equiv k^{m-\varphi(m)}(mod\ m)$。** ### 费马小定理 **费马小定理:若 $p\in prime$,则 $a^{p-1}\equiv 1(mod\ p)$。** 证明:$p\in prime$,则 $\varphi(p)=p-1$,代入欧拉定理得证。 这个定理最常用来求逆元,因为模数一般是质数,那么 $a^{p-2}·a\equiv 1(mod\ p)$,因此 $a^{p-2}$ 就是$a$ 在模 $p$ 意义下的逆元。 ### 阶 高次同余方程的阶:最小的正整数 $d$ 使得 $a^d\equiv 1(mod\ m)$,则 $d$ 为 $a$ 对 $m$ 的阶。由欧拉定理易得阶的存在性。 **定理:若 $a^x\equiv 1(mod\ m)$,则 $d\mid x$。** 证明:显然 $a^{x\%d}\equiv 1(mod\ m)$,若 $x\%d$ 不为 $0$ 则违反了 $d$ 的最小性,矛盾。 得证。 ### 原根和指数 原根:若 $x$ 对 $m$ 的阶为 $\varphi(m)$,则称 $x$ 为 $m$ 的原根。 **性质:对于任意一个原根 $x$,$x,x^2,x^3,\dots ,x^{\varphi(m)}$ 是模 $m$ 意义下的一个缩系。** 证明:假设不是缩系,因为 $\gcd(x,m)=1$,所以所有数都是缩系中的数,这样如果不是缩系则 $\exists 1\leq i<j\leq \varphi(m),x^i\equiv x^j(mod\ m)$。 两边做除法得 $x^{j-i}\equiv 1(mod\ m)$。 因为 $j-i<\varphi(m)$,矛盾。 得证。 **定理:$1,2,4,p^k,2p^k(p\in \complement_{prime}{\{2\}},k\in \mathbb{N_+})$ 是所有有原根的数。** ~~证明:不会。~~ 由这个定理可以得到素数都有原根。 原根的求法:记最小的原根为 $g$,大约不超过 $O(n^{\frac14})$,暴力找出来,则所有 $g^k(\gcd(k,\varphi(m)=1)$ 都是原根。 通过这种求法容易得到原根共有 $\varphi(\varphi(m))$ 个。 指数:若 $p\in prime$,$a$ 是 $p$ 的原根且 $a^k\equiv b(mod\ m)(k\leq m-1)$,则称 $k$ 为 $b$ 的指数,记作 $\mathrm{ind}_ab$。通过指数可以把模意义乘法变成指数加法。 ### 一次同余方程 求 $ax+b\equiv 0(mod\ m)$ 的正整数解。 这东西其实就是 $ax+b=my$,转换成上面的裴蜀定理,不再赘述。 ### 中国剩余定理 **$m=\gcd(m_1,m_2)$,则方程组 $x\equiv a_1(mod\ m_1)$ 和 $x\equiv a_2(mod\ m_2)$ 有解的充要条件是 $m\mid a_1-a_2$,且 $x$ 模 $m$ 有唯一解。** 显然当 $\gcd(m_1,m_2)=1$ 时方程组恒有解。 继续推广,得到对于一组 $m_1,m_2,\dots,m_n$,若 $\forall 1\leq i<j\leq n,\gcd(m_i,m_j)=1$,那么方程组 $x\equiv a_i(mod\ m_i)(i\in[1,n]\cup\mathbb{N_+})$ 在模 $\prod_{i=1}^nm_i$ 意义下有唯一解。 我们考虑求出这个解。令 $M_i=\frac{\prod_{j=1}^nm_j}{m_i}$,$b_i$ 满足 $b_iM_i\equiv 1(mod\ m_i)$,则解为 $\sum_{i=1}^na_ib_iM_i$。正确性显然,分别考虑对于模 $m_1$ 到 $m_n$ 的余数即可。 ## 3.二次同余方程 ### 第一型佩尔方程 形如 $x^2-Dy^2=1(x,y,D\in\mathbb{N_+})$ 的方程称为第一型佩尔方程。 **定理1:第一型佩尔方程在 $\sqrt D\in\mathbb{N_+}$ 时无正整数解,否则有无穷多组正整数解。** 证明:显然 $x^2$ 是完全平方数,$Dy^2=x^2-1$ 不是完全平方数,而 $y^2$ 是完全平方数,因此若有正整数解 $D$ 一定不能是完全平方数。 **定理2:若最小解为 $x_0,y_0$,那么任意一个解 $x_n,y_n$ 满足 $x_n+\sqrt Dy_n=(x_0+\sqrt Dy_0)^{n+1}$,由此得到递推式 $x_n+\sqrt Dy_n=(x_{n-1}+\sqrt Dy_{n-1})(x_0+\sqrt Dy_0)$。** ~~证明:还是不会。~~ 实际应用中 $D$ 一般不会太大,可以先暴力算出 $x_0,y_0$,然后利用**递推式**直接求解(直接用通项会掉精度)。 例如 $x^2-2y^2=1$,很容易算出 $x_0=3,y_0=2$,那么 $x_1+\sqrt2y_1=(3+2\sqrt2)^2=17+12\sqrt2$,因此 $x_1=17,y_1=12$。 ### 第二型佩尔方程 形如 $x^2-Dy^2=-1(x,y,D\in\mathbb{N_+})$ 的方程称为第二型佩尔方程。 同样的,在 $\sqrt D\in\mathbb{N_+}$ 时无解,否则有无穷多解。 找到最小解 $x_0,y_0$,一组解 $x_n,y_n$ 满足 $x_n+\sqrt Dy_n=(x_0+\sqrt Dy_0)^{2n+1}$,递推式 $x_n+\sqrt Dy_n=(x_{n-1}+\sqrt Dy_{n-1})(x_0+\sqrt Dy_0)^2$。 例题:给定 $T$,求使 $n(n+1)=2m(m+1)$ 有正整数解的大于 $T$ 的最小 $n$。 $n^2+n=2m^2+2m$ $4n^2+4n=8m^2+8m$ $(2n+1)^2=2(2m+1)^2-1$ $(2n+1)^2-2(2m+1)^2=-1$ 令 $x=2n+1,y=2m+1$ $x^2-2y^2=-1$ 手算 $x_0,y_0$,暴力递推,因为增长是指数的所以可以过,也可以矩阵快速幂倍增。 ### 勾股方程 $x^2+y^2=z^2$ 叫做勾股方程。 勾股方程的通解是 $x=2kuv,y=k(u^2-v^2),z=k(u^2+v^2)$,其中 $u,v,k\in\mathbb{N_+},u>v,\gcd(u,v)=1$。 证明:显然 $k$ 可以最后放缩,我们只要证明对于 $\gcd(x,y,z)=1$ 时,满足 $x=2uv,y=u^2-v^2,z=u^2+v^2$ 根据加法的奇偶性,$x,y,z$ 必然是两奇一偶。 同时 $z$ 一定是奇数,因为如果 $z$ 是偶数,那么 $z^2\equiv 0(mod\ 4)$,而左边两奇数 $x^2\equiv y^2\equiv 1(mod\ 4)$,$x^2+y^2\equiv 2(mod\ 4)$,两边不可能相等。 $x,y$ 等价,不妨令 $y$ 是偶数。 移项,得到 $x^2=(z+y)(z-y)$,显然 $\gcd(y,z)=1$,否则 $x,y,z$ 不互质。那么 $\gcd(z+y,z)=1$。因为 $z+y$ 是奇数,所以 $\gcd(z+y,2z)=1$。辗转相除一次,得到 $\gcd(z+y,z-y)=1$。 两个互质的数乘起来是完全平方数,那么必须分别是完全平方数,所以有 $z+y=u^2,z-y=v^2$,解得 $x=uv,y=\frac{u^2-v^2}2,z=\frac{u^2+v^2}2$。 得证。 这样构造出的勾股方程的解满足 $\gcd(x,y,z)=k$。 勾股方程通解可以优化枚举勾股数的效率。 ## 4.排列组合 ### 勒让德定理 $p\in prime$,则 $n!$ 质因数分解中 $p$ 的次数是 $\sum_{i=1}\lfloor\frac{n}{p^i}\rfloor=\frac{n-S(n)}{p-1}$,$S(n)$ 表示 $p$ 进制下 $n$ 的数位和。 推论:$\dbinom {n+m}m$ 中 $p$ 的幂次等于 $n+m$ 在 $p$ 进制下进位次数。 ### 卢卡斯定理 若 $p$ 进制下 $n$ 表示为 $(a_0a_1\dots a_m)$,$k$ 表示为 $(b_0b_1\dots b_m)$(允许前导 0),那么 $\dbinom n k\equiv\prod_{i=0}^m\dbinom{a_i}{b_i}(mod\ p)$ 这个定理用于计算大组合数取模。 例题:[【模板】卢卡斯定理](https://www.luogu.com.cn/problem/P3807) 直接应用结论即可。 ```cpp #include<iostream> #include<cstdio> using namespace std; #define int long long int t,n,m,p,fac[200001],inv[200001]; inline int pw(int a,int b) { int res=1; while(b) { if(b&1) res=res*a%p; b>>=1; a=a*a%p; } return res; } inline int c(int x,int y) { return fac[x]*inv[y]%p*inv[x-y]%p; } int lucas(int x,int y) { if(!x||!y) return 1; return c(x%p,y%p)*lucas(x/p,y/p)%p; } signed main() { scanf("%lld",&t); while(t--) { scanf("%lld%lld%lld",&n,&m,&p); int tmp=n; n=n+m; m=tmp; fac[0]=inv[0]=1; for(register int i=1;i<=n;++i) { fac[i]=fac[i-1]*i%p; inv[i]=pw(fac[i],p-2); } printf("%lld\n",lucas(n,m)); } return 0; } ``` ## 5. 莫比乌斯函数 定义: $$\mu(n)=\left\{ \begin{aligned} 1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (n=1) \\ (-1)^k\ \ \ \ (n=\prod_{i=1}^kp_i(p_i\in prime))\\ 0\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (\mathrm{otherwise}) \\ \end{aligned} \right. $$ 莫比乌斯反演:若 $f(n)=\sum_{d\mid n}g(d)$,则 $g(n)=\sum_{d\mid n}\mu(d)f(\frac n d)$。 这个反演也可以理解成卷积:若 $g*1=f$,那么 $f*\mu=g$。 性质:$\sum_{d\mid n}\mu(d)=[n=1]$ 证明:$n=1$ 显然成立。 设 $n=\prod_{i=1}^mp_i^{a_i}(p_i\in prime)$,那么所有 $\mu(d)$ 非零的位置必然是在 $p_1,p_2,\dots,p_m$ 中选择若干个乘起来得到的,共有 $2^m$ 个位置。 只考虑 $p_1$,依据是否选择 $p_1$ 可以将 $2^m$ 个数分成两组,不妨设含 $p_1$ 的一组为 $A$,不含的一组为 $B$,显然每组有 $2^{m-1}$ 个数。 有一个显然的结论:$\forall d\in B,p_1d\in A$。这是因为 $A,B$ 中的元素是一一对应的。那么在 $B$ 中 $\mu(d)=-1$ 的 $d$,$\mu(p_1d)=1$,因为多了一个素因子 $p_1$,反过来也同理,由此我们得到了 $\sum_{d\in A}[\mu(d)=1]=\sum_{d\in B}[\mu(d)=-1]$ 和 $\sum_{d\in A}[\mu(d)=-1]=\sum_{d\in B}[\mu(d)=1]$,所以在 $2^m$ 个数中 $\mu(d)=1$ 和 $\mu(d)=-1$ 的个数是相等的,因此相加为零。 得证。 例题:求 $\phi(i)=\sum_{i=1}^n\varphi(i)$。 这玩意可以直接杜教筛 $\phi(i)$,也可以筛 $\mu$ 的前缀和+数论分块。 杜教筛下面会写,先拿它当一个莫反练手题。 上文提到 $\sum_{d\mid n}\varphi(d)=n$,刚好是莫反的形式($f(n)=\mathrm{id},g(n)=\varphi(n)$),直接莫反一下代入上式。 $\phi(i)=\sum_{i=1}^n\sum_{d\mid i}\mu(d)\frac i d$ 接下来套路地先枚举 $d$。 $\phi(i)=\sum_{d=1}^n\mu(d)\sum_{i=1}^{\lfloor\frac n d\rfloor}i$ 前半部分杜教筛,后半部分数论分块。 ## 6.杜教筛 杜教筛可以在低于线性的时间内求**积性函数**的前缀和。他的思想是暴力筛出较小的一些函数值,在较大的定义域上递归求解。 假设我们要求 $S(n)=\sum_{i=1}^nf(i)$,现在我们假设通过一种玄妙的手段找来另一个函数 $g(i)$,现在把他俩卷起来得到 $h(i)$ ,对 $h$ 求一个前缀和: $\sum_{i=1}^nh(i)=\sum_{i=1}^n\sum_{d|i}g(d)f(\frac i d)$ $=\sum_{d=1}^ng(d)\sum_{i=1}^{\lfloor\frac n d\rfloor}f(i)=\sum_{d=1}^ng(d)S(\lfloor\frac n d\rfloor)$ 我们想要 $S(n)$,我们发现 $h(i)$ 的前缀和大致相当于 $g*S$(虽然不完全是),所以在前缀和里面会有一项 $g(1)S(n)$,$g(1)$ 显然是易得的,于是我们决定看看这个怎么算。 利用前缀和思想可以得到: $g(1)S(n)=\sum_{i=1}^ng(i)S(\lfloor\frac n i\rfloor)-\sum_{i=2}^ng(i)S(\lfloor\frac n i\rfloor)$ $=\sum_{i=1}^nh(i)-\sum_{i=2}^ng(i)S(\lfloor\frac n i\rfloor)$ 我会递归!只要快速计算 $h(i)$ 和 $g(i)$ 的前缀和就好了!问题圆满解决……了吗? 我们似乎还不知道 $g(i)$ 是什么。事实上这在不同的题目里是不同的,但选取 $g(i)$ 的原则是一致的:需要使得 $h(i)$ 和 $g(i)$ 的前缀和均易于计算。 下面有几个例子帮助理解 $g(i)$ 的选取。 - 求 $\sum_{i=1}^n\mu(i)$。 根据 $\mu*1=\epsilon$ 这一经典的性质,不难想到 $g$ 应该取 $1$,此时 $h=\epsilon$,而这俩东西的前缀和一个都巨大简单,然后就很快乐的做完了。 - 求 $\phi(i)$ 根据 $\varphi(i)*1=\mathrm{id}$ 这一性质,不难想到 $g=1$,此时 $h=\mathrm{id}$,这俩东西前缀和也巨大简单,于是也做完了。 朴素杜教筛复杂度 $O(n^{\frac 3 4})$,做一些优化可以达到 $O(n^{\frac 2 3})$。 例题:[【模板】杜教筛(Sum)](https://www.luogu.com.cn/problem/P4213),就是上面两个例子合起来。 ```cpp #include<iostream> #include<cstdio> #include<map> using namespace std; #define int long long int t,n,phi[5000001],mu[5000001],p[5000001],cnt; bool vis[5000001]; map<int,int> sphi,smu; inline void init() { mu[1]=phi[1]=1; for(register int i=2;i<=5000000;++i) { if(!vis[i]) { p[++cnt]=i; phi[i]=i-1; mu[i]=-1; } for(register int j=1;j<=cnt&&p[j]*i<=5000000;++j) { vis[p[j]*i]=1; if(i%p[j]==0) { phi[p[j]*i]=p[j]*phi[i]; break; } else { phi[p[j]*i]=(p[j]-1)*phi[i]; mu[p[j]*i]=-mu[i]; } } } for(register int i=2;i<=5000000;++i) { phi[i]+=phi[i-1]; mu[i]+=mu[i-1]; } } int getphi(int n) { if(n<=5000000) return phi[n]; if(sphi[n]) return sphi[n]; int res=n*(n+1)/2; for(register int i=2,j;i<=n;i=j+1) { j=n/(n/i); res-=(j-i+1)*getphi(n/i); } return sphi[n]=res; } int getmu(int n) { if(n<=5000000) return mu[n]; if(smu[n]) return smu[n]; int res=1; for(register int i=2,j;i<=n;i=j+1) { j=n/(n/i); res-=(j-i+1)*getmu(n/i); } return smu[n]=res; } signed main() { scanf("%lld",&t); init(); while(t--) { scanf("%lld",&n); printf("%lld %lld\n",getphi(n),getmu(n)); } return 0; } ``` ## 7.二次剩余 ### 定义及求解 定义:$m>1$,若 $\gcd(n,m)=1$ 且 $x^2\equiv n(mod\ m)$ 有解,那么称 $n$ 是 $m$ 的二次剩余。 勒让德符号:若$n\equiv 0(mod\ m)$,那么 $(\frac n m)=0$,否则,若 $n$ 是 $m$ 的二次剩余,那么 $(\frac n m)=1$,否则 $(\frac n m)=-1$。 **定理:$p\in prime$,则 $p$ 的缩系中恰好有一半数是二次剩余,另一半不是。** 证明:素数,则小于 $p$ 的正整数都在缩系里。首先证明存在 $\frac{p-1}2$ 个二次剩余。假设他们分别为 $1^2\%p,2^2\%p,\dots,(\frac{p-1}2)^2\%p$。他们显然都是二次剩余,我们只要证明他们两两互不相同即可。 假设 $\exists1\leq i<j\leq\frac{p-1}2,i^2\equiv j^2(mod\ p)$,那么有 $(j+i)(j-i)\equiv 0(mod\ p)$。显然 $j-i<j+i<p$,矛盾。 因此存在 $\frac{p-1}2$ 个二次剩余。 加下来证明只有 $\frac{p-1}2$ 个二次剩余。我们考虑刚才没有选中的 $(\frac{p+1}2)^2\%p,(\frac{p+3}2)^2\%p,\dots,(p-1)^2\%p$,容易发现 $1^2\equiv(p-1)^2(mod\ p),2^2\equiv(p-2)^2(mod\ p)$,以此类推,两组二次剩余一一对应,因此二次剩余恰有 $\frac{p-1}2=\frac{\varphi(p)}2$ 个。 得证。 **欧拉判别法:若 $p\in\complement_{prime}{\{2\}}$,则 $n^{\frac{p-1}2}\equiv(\frac n p)(mod\ p)$**。 证明:如果 $n$ 是二次剩余,那么令 $n=x^2\%p$,那么左边变成 $x^{p-1}\%p$,由费马小定理得到左边=右边=$1$,成立。 如果 $n$ 不是二次剩余,根据拉格朗日定理($n$ 次同余方程最多有 $n$ 个解),$n^{\frac{p-1}2}\equiv1(mod\ p)$ 这一同余方程至多有 $\frac{p-1}2$ 个解,而二次剩余恰好有 $\frac{p-1}2$ 个,所以每一个解对应一个二次剩余,不是二次剩余左边一定不是 $1$。但根据费马小定理,我们知道 $(n^{\frac{p-1}2})^2=n^{p-1}\equiv1(mod\ p)$,那么 $n^{\frac{p-1}2}$ 就只能是 $-1$ 了。 得证。 由欧拉判别法还可以得到勒让德符号是一个积性函数,因为 $(\frac n p)(\frac m p)\equiv n^{\frac{p-1}2}m^{\frac{p-1}2}\equiv (nm)^{\frac{p-1}2}\equiv(\frac{nm}p)(mod\ p)$。 还可以简单地得到两个二次剩余或两个非二次剩余乘积是二次剩余,一个二次剩余和一个非二次剩余的乘积是非二次剩余。 **以下是手算二次剩余的方法,偏 $MO$,不感兴趣的可以略过。** 根据勒让德符号的积性,算 $(\frac n p)$ 时可以直接把 $n$ 质因数分解,然后直接求素数是否为二次剩余即可。 **定理:$(\frac 2 p)=(-1)^{\frac{p^2-1} 8}$。** **$Gauss$ 二次互反律:$p,q\in\complement_{prime}{\{2\}},p\not=q$,则 $(\frac p q)(\frac q p)=(-1)^{\frac{(p-1)(q-1)}4}$。** 通过上述两个定理可以快速手算 $(\frac n m)$ **下面是 $OI$ 中计算二次剩余的方法。** 定理:对于二次剩余方程 $x^2\equiv n(mod\ p)$,$p$ 是奇素数,找到一个 $a$ 使得 $(\frac{a^2-n} p)=-1$,那么 $x=(a+\sqrt{a^2-n})^{\frac{p+1}2}$ 是原方程的解。其中对非二次剩余的部分开根类似于复数,有一套新的运算法则,可以做模板题了解一下。 证明:可以去看模板题题解,我~~因为懒~~就不写了。 例题:[【模板】二次剩余](https://www.luogu.com.cn/problem/P5491) ```cpp #include<iostream> #include<cstdio> #include<algorithm> #include<ctime> using namespace std; #define int long long int inv,t,n,mod; struct cp { int x,y; cp(int x_,int y_): x(x_),y(y_){} cp operator *(const cp &other) const { return cp((x*other.x%mod+inv*y%mod*other.y%mod)%mod,(x*other.y%mod+y*other.x%mod)%mod); } }; inline cp pw(cp a,int b) { cp res=cp(1,0); while(b) { if(b&1) res=res*a; b>>=1; a=a*a; } return res; } signed main() { srand(time(NULL)); scanf("%lld",&t); while(t--) { inv=0; scanf("%lld%lld",&n,&mod); if(!n) { puts("0"); continue; } if(pw(cp(n,0),(mod-1)>>1).x==mod-1) { puts("Hola!"); continue; } int a=rand()%mod; while(!a||pw(cp((a*a%mod-n+mod)%mod,0),(mod-1)>>1).x==1) a=rand()%mod; inv=(a*a%mod-n+mod)%mod; int ans=pw(cp(a,1),(mod+1)>>1).x; if(mod-ans<ans) ans=mod-ans; printf("%lld %lld\n",ans,mod-ans); } return 0; } ``` ### 二次同余式 **定理:若 $L>0,p>2,p\in prime,p\nmid n$,那么 $x^2\equiv n(mod\ p^L)$ 有 $1+(\frac n p)$ 个解。** 推广:如果 $p=2$,$L=1$ 时有一个解;$L=2$ 时若 $n\equiv 0(mod\ p^L)$ 或 $n\equiv 1(mod\ p^L)$ 时有两个解,否则无解;$L>2$ 时若 $n\equiv 1(mod\ 8)$ 有四个解,否则无解。 ~~证明:依然是不会。~~ 例题:求 $x^2\equiv1(mod\ n)$ 的解的个数。 设 $n=\prod_{i=1}^mp_i^{a_i}$,然后拆了用 $CRT$ 合并。 那么会得到 $m$ 个方程 $x^2\equiv 1(mod\ p_i^{a_i})$,如果 $p_i$ 有 $2$ 先特判掉,然后根据上面这个定理,每个方程的解的个数和 $x^2\equiv 1(mod\ p_i)$ 是一样的(因为 $L$ 并不影响)。于是搞出来直接乘法原理即可。 ### 高次同余式 **定理:$x^k\equiv 1(mod\ p)(p\in prime)$ 有 $\gcd(k,p-1)$ 个解。** 将这个定理推广,可得 $x^k\equiv n(mod\ p)(p\in prime)$ 在 $p\nmid n$ 时无解或有 $\gcd(k,p-1)$ 个解。 ## 8.升幂问题 **升幂定理:若 $p$ 是奇素数,$p\nmid ab,p\mid a-b$,那么 $a^n-b^n$ 中 $p$ 的幂次等于 $a-b$ 中 $p$ 的幂次与 $n$ 中 $p$ 的幂次之和。**