【数学】数论

\(\color{red}{\textbf{1.整除和同余}}\)

\(\qquad\color{brown}{\text{1.1 整除}}\)

\(\qquad\qquad\qquad\color{orange}{\text{1.1.1 定义}}\)

\(\qquad\qquad\qquad\quad\text{如果有}a,b,c\in N,\text{且}b=a\times c,\text{则称}a\text{整除}b,\text{记作}a\mid b\)

\(\qquad\qquad\qquad\color{orange}{\text{1.1.2 性质}}\)

\(\qquad\qquad\qquad\quad\begin{aligned} &1.a\mid a\cr\cr &2.\text{若}a\mid b\text{且}b\mid c,\text{则}a\mid c\cr\cr &3.\text{若}a\mid b_1,a\mid b_2,\cdots,a\mid b_n,\text{则}a\mid b_i\times c_i(i\in \left[1,n\right])\text{且}a\mid \sum\limits^n_{i=1}(b_i\times c_i)\cr\cr &4.\text{若}a\mid b\text{且}a\mid b\pm c,\text{则}a\mid c\cr\cr &5.\text{若}n\mid a-b\text{且}n\mid c-d,\text{则}n\mid a\times c-b\times d \end{aligned}\)

\(\qquad\color{brown}{\text{1.2 同余}}\)

\(\qquad\qquad\qquad\color{orange}{\text{1.2.1 定义}}\)

\(\qquad\qquad\qquad\quad\text{如果有}a,b,n\in N,n\mid a-b,\text{则称}a\text{与}b\text{模}n\text{同余},\text{记作}a\equiv b\pmod n\)

\(\qquad\qquad\qquad\color{orange}{\text{1.2.2 性质}}\)

\(\qquad\qquad\qquad\quad\begin{aligned} &1.a\equiv a\pmod n\cr\cr &2.\text{若}a\equiv b\pmod n,\text{则}b \equiv a\pmod n\cr\cr &3.\text{若}a\equiv b\pmod n\text{且}b\equiv c\pmod n,\text{则}a\equiv c\pmod n\cr\cr &4.\text{若}a\equiv c\pmod n\text{且}b\equiv d\pmod n,\text{则}a+b\equiv c+d\pmod n\text{且}a\times b\equiv c\times d\pmod n\cr\cr &5.\text{若}a\equiv b\pmod n,\text{则}a\times c\equiv b\times c\pmod n\cr\cr &\ \ \ \text{反之若}a\times c\equiv b\times c\pmod n\text{且}c \not=0,\text{则}a\equiv b\pmod n \end{aligned}\)

\(\qquad\qquad\qquad\color{orange}{\text{1.2.3 完全剩余系}}\)

\(\qquad\qquad\qquad\quad\text{若一个整数数列}a_1,a_2,\cdots ,a_n\text{除以}n\text{的余数两两不同},\text{则称为一个模}n\text{的完全剩余系}\)

\(\color{red}{\textbf{2.约数和倍数}}\)

\(\qquad\color{brown}{\text{2.1 约数}}\)

\(\qquad\qquad\qquad\color{orange}{\text{2.1.1 定义}}\)

\(\qquad\qquad\qquad\quad\text{若}d \mid n,\text{则称}d\text{是}n\text{的约数},n\text{是}d\text{的倍数}\)

\(\qquad\qquad\qquad\color{orange}{\text{2.1.2 某个数的约数}}\)

\(\qquad\qquad\qquad\quad\text{试除法:}\)

				ull factor[size];
				void find_factor(ull n) {
					ull sq = 1ll*sqrt(n+0.5);
					for(ull i = 1;i <= sq;++i) 
						if(n%i == 0) {
							factor[++factor[0]] = i;
							if(i != n/i) 
								factor[++factor[0]] = n/i;
						}
					return;
				}

\(\qquad\qquad\qquad\color{orange}{\text{2.1.3 区间内数的约数}}\)

				vector<ull> factor[size];
				void find_factor(ull n) {
					for(ull i = 1;i <= n;++i) 
						for(ull j = 1;j <= n/i;++j) 
							factor[i*j].push_back(i);
					return;
				}

\(\qquad\color{brown}{\text{2.2 最大公约数}}\)

\(\qquad\qquad\qquad\color{orange}{\text{2.2.1 定义}}\)

\(\qquad\qquad\qquad\quad\text{一个整数数列}a_1,a_2,\cdots,a_n\text{的最大公约数}(\text{记作}\gcd(a_1,a_2,\cdots,a_n))\)

\(\qquad\qquad\qquad\quad\text{就是同时整除}a_1,a_2,\cdots,a_n\text{的最大整数}\)

\(\qquad\qquad\qquad\color{orange}{\text{2.2.2 裴蜀定理}}\)

\(\qquad\qquad\qquad\quad\begin{aligned} &1.\text{对任何}a_1,a_2,\cdots,a_n\in N,\text{存在}x_1,x_2,\cdots,x_n,\cr\cr &\ \ \ \text{使得}\gcd(a_1,a_2,\cdots,a_n)=a_1\times x_1+a_2\times x_2+\cdots+a_n\times x_n\cr\cr &2.\text{推论:}a_1,a_2,\cdots,a_n\in N,a\in N_+,\cr\cr &\ \ \ \text{则}\gcd(a\times x_1,a\times x_2,\cdots,a\times x_n)=a\times\gcd(x_1,x_2,\cdots,x_n)\cr\cr &3.\text{同时:}\gcd(a_1,a_2,\cdots,a_n)=\gcd(\gcd(a_1,a_2,\cdots,a_{n-1}),a_n)\cr\cr &4.\text{又可得:若}a\div b=q\cdots\cdots r,\text{则}\gcd(a,b)=\gcd(b,r) \end{aligned}\)

\(\qquad\qquad\qquad\color{orange}{\text{2.2.3 欧几里得方法}}\)

\(\qquad\qquad\qquad\quad\text{其实上面的第四条已经离欧几里得方法很近了},\text{因为}\gcd(a,b)=\gcd(b,a\%b)\)

\(\qquad\qquad\qquad\quad\text{递归去求即可:}\)

				int gcd(int a,int b) {
					return b == 0 ? a : gcd(b,a%b);
				}

\(\qquad\qquad\qquad\quad\text{当然也可以循环去求:}\)

				int gcd(int x,int y) {
    				int r = x%y;
    				while(r) {
        				x = y;
        				y = r;
        				r = x%y;
    				}
    				return y;
				}

\(\qquad\qquad\qquad\color{orange}{\text{2.2.4 互质}}\)

\(\qquad\qquad\qquad\quad\text{如果两个数}a,b\in N,\gcd(a,b)=1,\text{则称}a,b\text{互质}\)

\(\qquad\qquad\qquad\color{orange}{\text{2.2.5 模n逆}}\)

\(\qquad\qquad\qquad\quad\text{若}\gcd(a,b)=1,\text{则}\exists x\in N,\text{使得}x\times a\equiv 1\pmod b\)

\(\qquad\qquad\qquad\quad\text{反之任意满足条件的}x\in N \text{模}b\text{同余}\)

\(\qquad\qquad\qquad\color{orange}{\text{2.2.6 高斯引理}}\)

\(\qquad\qquad\qquad\quad\text{若}a\mid b\times c,\gcd(a,b)=1,\text{则}a\mid c\)

\(\qquad\qquad\qquad\quad\text{若}\gcd(a,n)=\gcd(b,n)=\gcd(c,n)=1,\text{且}a\times b\equiv a\times c\pmod n,\text{则}b\equiv c\pmod n\)

\(\qquad\color{brown}{\text{2.3 最小公倍数}}\)

\(\qquad\qquad\qquad\color{orange}{\text{2.3.1 定义}}\)

\(\qquad\qquad\qquad\quad\text{若有一个整数数列}a_1,a_2,\cdots,a_n\text{,则它们的最小公倍数}(\text{记作}\operatorname{lcm}(a_1,a_2,\cdots,a_n))\)

\(\qquad\qquad\qquad\quad\text{为同时被}a_1,a_2,\cdots,a_n\text{整除的最小整数}\)

\(\qquad\qquad\qquad\color{orange}{\text{2.3.2 性质}}\)

\(\qquad\qquad\qquad\quad\begin{aligned} &1.\operatorname{lcm}(a,b)=\dfrac{a\times b}{\gcd(a,b)}\cr\cr &2.\operatorname{lcm}(a_1,a_2,\cdots,a_n)=\operatorname{lcm}(\operatorname{lcm}(a_1,a_2,\cdots,a_{n-1}),a_n)\cr\cr &3.\operatorname{lcm}(a,b)\ge\dfrac{a\times b}{b-a}\quad(b>a)\cr\cr &4.\text{若}\dfrac{\operatorname{lcm}(a,b)}{\gcd(a,b)}=a-b,\text{则}\operatorname{lcm}(a,b)={\gcd}^2(a,b)\cr\cr &5.\text{若}\operatorname{lcm}(x,y)-\operatorname{lcm}(x,z)=y-z,\text{则}x\mid y, x\mid z \end{aligned}\)

\(\qquad\qquad\qquad\quad\text{其中我们通过性质1可得到求解最小公倍数的方法}\)

				int lcm(int a,int b) {
					return a*b/gcd(a,b);
				}

\(\color{red}{\textbf{3.质数和合数}}\)

\(\qquad\color{brown}{\text{3.1 质数}}\)

\(\qquad\qquad\qquad\color{orange}{\text{3.1.1 定义}}\)

\(\qquad\qquad\qquad\quad\text{若}p\in N_+\text{无法被除了}1\text{和它本身以外的任何自然数整除},\text{则称}p\text{为质数}\)

\(\qquad\qquad\qquad\color{orange}{\text{3.1.2 试除法}}\)

\(\qquad\qquad\qquad\quad\text{根据定义,我们可以通过试除小于}n\text{的每一个整数来判断}n\text{是否为质数}\)

\(\qquad\qquad\qquad\quad\text{实际上我们只用用}\left(1,\sqrt n\right]\text{试除即可}\)

                  bool isPrime(long long aim) {
                      if(aim == 1) return false;
                      if(aim == 2) return true;
                      long long sq = 1ll*sqrt(aim+0.5);
                      for(long long i = 2;i <= sq;++i) 
                          if(aim%i == 0) return false;
                      return true;
                  }

\(\qquad\qquad\qquad\quad\text{时间复杂度就是}O(\sqrt n)\)

\(\qquad\qquad\qquad\color{orange}{\text{3.1.3 Miller-Rabin素性测试}}\)

\(\qquad\qquad\qquad\quad\text{这种方法适用于快速对一个数是否为质数的问题作出判断,并要求保证较高的正确性}\)

\(\qquad\qquad\qquad\quad\text{虽然但是,它的正确性不是1}\)

				bool Miller_Rabin(ull aim) {
					if(aim == 2) return true;
					if(aim < 2||!(aim&1)) return false;
					ull tmp = aim-1, temp = 0;
					while(!(tmp&1)) {
						temp++;
						tmp >>= 1;
					} 
					int check_times = 20;
					for(int outs = 1;outs <= check_times;++outs) {
						ull a = rand()%(aim-1)+1, x = turtle_pow(a,tmp,aim), y;
						for(int i = 1;i <= temp;++i) {
							y = turtle_mul(x,x,aim);
							if(y == 1&&x != 1&&x != aim-1) 
								return false;
							x = y;
						}
						if(y != 1) return false;
					}
					return true;
				}

\(\qquad\qquad\qquad\quad\text{时间复杂度是}O(\log(n))\)

\(\qquad\qquad\qquad\color{orange}{\text{3.1.4 线性筛素数}}\)

				int prime[the_size];
				bool check[the_size];
				void linePrime(int n) {
					check[0] = check[1] = true;
					for(int i = 2;i <= n;++i) {
						if(!check[i]) 
							prime[++prime[0]] = i;
						for(int j = 1;j <= prime[0];++j) {
							if(i*prime[j] > n) break;
							check[i*prime[j]] = true;
							if(i%prime[j] == 0) break;
						}
					}
				}

\(\qquad\qquad\qquad\color{orange}{\text{3.1.5 既约剩余系}}\)

\(\qquad\qquad\qquad\quad\text{若一个整数数列}a_1,a_2,\cdots ,a_k\text{使得任何与}n\text{互素的整数总是模}n\text{同余于}a_1,a_2,\cdots ,a_k\text{中的一个},\)

\(\qquad\qquad\qquad\quad\text{则称}a_1,a_2,\cdots ,a_k\text{为}n\text{的既约剩余系}\)

\(\qquad\color{brown}{\text{3.2 合数}}\)

\(\qquad\qquad\qquad\color{orange}{\text{3.2.1 定义}}\)

\(\qquad\qquad\qquad\quad\text{很明显},\text{若}n\in N_+\text{不是质数},\text{则它是合数}\)

\(\qquad\color{brown}{\text{3.3 质数的无限性}}\)

\(\qquad\qquad\qquad\color{orange}{\text{3.3.1 证明}}\)

\(\qquad\qquad\qquad\quad\text{假设只有有限个素数}p_1,p_2,\cdots,p_k.\)

\(\qquad\qquad\qquad\quad\text{考虑}p_1\times p_2\times \cdots\times p_k+1,\text{取它的一个质因子}q.\)

\(\qquad\qquad\qquad\quad\text{则}q\in\{p_1,p_2,\cdots,p_k\},\text{又}q\mid p_1\times p_2\times\cdots\times p_k+1,\text{所以}q\mid 1.\text{矛盾}\)

\(\qquad\color{brown}{\text{3.4 基本算术定理}}\)

\(\qquad\qquad\qquad\color{orange}{\text{3.4.1 证明}}\)

\(\qquad\qquad\qquad\quad\text{基本算术定理的内容是:}\)

\(\qquad\qquad\qquad\quad\text{任何一个大于}1\text{的正整数都能被唯一分解成有限个质数的乘积,可记作:}\)

\[\qquad\qquad\qquad\quad n={p_1}^{\alpha_1}\times{p_2}^{\alpha_2}\times\cdots\times{p_k}^{\alpha_k} \]

\(\qquad\qquad\qquad\quad\text{让我们从一个弱形式开始:}\)

\[\qquad\qquad\qquad\quad\text{任何大于}1\text{的}n\in N\text{都可以写成素数的乘积} \]

\(\qquad\qquad\qquad\quad\text{证明:}\)

\(\qquad\qquad\qquad\color{orange}{\text{3.4.2 质因数分解}}\)

\(\qquad\qquad\qquad\quad\text{还是试除法:}\)

				vector<ull> pf, times;
				void prime_divide(ull n) {
					ull sq = 1ll*sqrt(n+0.5);
					for(ull i = 2;i <= sq;++i) 
						if(n%i == 0) {
							pf.push_back(i);
							times.push_back(1);
							n /= i;
							while(n%i == 0) {
								times[times.size()-1]++;
								n /= i;
							}
						}
					if(n > 1) {
						pf.push_back(n);
						times.push_back(1);
					}
				}

\(\color{red}{\textbf{4.威尔逊定理}}\)

\(\qquad\color{brown}{\text{4.1 内容与证明}}\)

\(\qquad\qquad\qquad\color{orange}{\text{4.1.1 威尔逊定理}}\)

\(\qquad\qquad\qquad\quad\text{威尔逊定理的内容是:}p\in N\text{为质数等价于}(p-1)!+1\equiv 0\pmod p\)

\(\color{orange}{\qquad\qquad\qquad\text{4.1.2 证明}}\)

\(\qquad\qquad\qquad\quad\begin{aligned} 1.&\text{充分性:对}x\in\{1,2,\cdots,p-1\},\text{设}inv_x\times x\equiv 1\pmod p.\cr\cr &\text{现将}\{1,2,\cdots,p-1\}\text{分组},\text{若}inv_x\not=x,inv_x\text{和}x\text{一组};\text{否则}x\text{单独一组}.\cr\cr &\text{成对的}inv_x\times x\equiv 1\pmod p,\text{不成对的数}x^2\equiv 1\pmod p.\cr\cr &\text{等价于}(x-1)\times(x+1)\equiv 0\pmod p,\text{其解恰为}1\text{和}-1.\cr\cr &\text{因此}(p-1)!=1\times2\times\cdots\times(p-1)\bmod p\text{同余于不成对的数的乘积},\text{即}-1.\cr\cr 2.&\text{必要性:设}n\text{是合数},\text{记}n=a\times b\ (a,b>1),\text{则}a\times b-1\ge a.\cr\cr &\text{因此}a\mid (n-1)!,\text{与}a\mid (n-1)!+1\text{矛盾},\text{故}n\text{是质数}. \end{aligned}\)

\(\color{red}{\textbf{5.丢番图方程}}\)

\(\qquad\color{brown}{\text{5.1 线性丢番图方程}}\)

\(\qquad\qquad\qquad\quad\text{一个最简单的线性同余方程形如:}\)

\[\qquad\qquad\qquad\quad a_1\times x_1+a_2\times x_2+\cdots+a_k\times x_k=b \]

\(\qquad\qquad\qquad\color{orange}{\text{5.1.1 解}}\)

\(\qquad\qquad\qquad\quad1.\text{方程}a_1\times x_1+a_2\times x_2+\cdots+a_k\times x_k=b\text{有解},\text{等价于}\gcd(a_1,a_2,\cdots,a_k)\mid b\)

\(\qquad\qquad\qquad\quad2.\text{若方程}a\times x+b\times y=c\text{有一特解}(x_0,y_0),\)

\(\qquad\qquad\qquad\qquad\text{则有通解}(x_0+\dfrac{b}{\gcd(a,b)}\times t,y_0+\dfrac{b}{\gcd(a,b)}\times t)\ (t\in Z)\)

\(\qquad\qquad\qquad\color{orange}{\text{5.1.2 扩展欧几里得方法}}\)

\(\qquad\qquad\qquad\quad\text{扩展欧几里得用来解决这样一个特殊的同余方程:}a\times x+b\times y=\gcd(a,b)\)

\(\qquad\qquad\qquad\quad\text{其中}a,b\text{已知}\)

				ull ex_gcd(ull a,ull b,ull &x,ull &y) {
					if(b == 0) {
						x = 1, y = 0;
						return a;
					}
					ull res = ex_gcd(b,a%b,x,y);
					ull tmp = x;
					x = y;
					y = tmp-a/b*y;
					return res;
				}

\(\qquad\qquad\qquad\quad\text{设解为}(x_0,y_0),\text{则方程}a\times x+b\times y=c\text{的一组特解为}(\dfrac{c}{\gcd(a,b)}\times x_0,\dfrac{c}{\gcd(a,b)}\times y_0)\)

\(\color{red}{\textbf{6.排列与组合}}\)

\(\qquad\color{brown}{\text{6.1 加法原理}}\)

\(\qquad\color{brown}{\text{6.2 乘法原理}}\)

\(\qquad\color{brown}{\text{6.3 排列数}}\)

\(\qquad\color{brown}{\text{6.4 组合数}}\)

\(\qquad\color{brown}{\text{6.5 二项式定理}}\)

\(\color{red}{\textbf{7.数论函数}}\)

\(\qquad\color{brown}{\text{7.1 常见数论函数}}\)

\(\qquad\qquad\qquad\color{orange}{\text{7.1.1 常见数论函数}}\)

\(\qquad\qquad\qquad\quad\begin{aligned} &\varphi(n):\left[1,n\right]\text{中与}n\text{互质的数的个数}\cr\cr &\tau(n):n\text{的正因子个数}\cr\cr &\sigma(n):n\text{的正因子之和}\cr\cr &\omega(n):n\text{的不同质因子的个数}\cr\cr &\Omega(n):n\text{的质因子的个数}\cr\cr &\pi(n):\left[1,n\right]\text{中的质数的个数}\cr\cr &\mu(n)=\begin{cases} (-1)^{\omega(n)}&\omega(n)=\Omega(n)\\ 0&\omega(n)\not=\Omega(n)\\ \end{cases}\cr\cr &\nu_p(n):n\text{的质分解中}p\text{的幂次}\cr\cr &\gamma_k(n):\text{满足}n={x_1}^2+{x_2}^2+\cdots+{x_k}^2\text{的数组}{x_1,x_2,\cdots,x_k}\text{的个数} \end{aligned}\)

\(\qquad\color{brown}{\text{7.2 数论卷积}}\)

\(\qquad\color{brown}{\text{7.3 积性函数}}\)

\(\qquad\color{brown}{\text{7.4 欧拉函数}}\)

\(\qquad\qquad\qquad\color{orange}{\text{7.4.1 性质}}\)

\(\qquad\qquad\qquad\quad\text{设}n\text{的质因子分解式为}{p_1}^{\alpha_1}\times{p_2}^{\alpha_2}\times\cdots\times{p_k}^{\alpha_k}\)

\(\qquad\qquad\qquad\quad\begin{aligned} &1.\varphi(n)=\prod\limits_{i=1}^{k}({p_i}^{\alpha_i-1}\times(p_i-1))\cr &\ \ \ \varphi(n)=n\times\prod\limits_{i=1}^{k}(1-\dfrac{1}{p_i})\cr\cr &2.\text{若}\gcd(n,m)=1,\text{则}\varphi(m\times n)=\varphi(n)\times\varphi(m)\cr &\ \ \ \text{若}a\mid b,\text{则}\varphi(a)\mid\varphi(b)\cr\cr &3.\sum\limits_{i=1}^{n}(\varphi(i)\times\left\lfloor\dfrac{n}{i}\right\rfloor)=\dfrac{n\times(n+1)}{2}\cr\cr &4.\sum\limits_{d\mid n}\varphi(d)=n\cr\cr &5.\text{若}d\mid n,\text{则}\left[1,n\right]\text{中与}n\text{的最大公约数为}d\text{的个数有}\varphi(\tfrac{n}{d})\text{个} \end{aligned}\)

\(\qquad\qquad\qquad\color{orange}{\text{7.4.2 求法}}\)

\(\qquad\qquad\qquad\quad\text{利用上文的性质}1\text{我们可以求解}\varphi(n)\)

				ull EulerFunction(ull aim) {
					ull sq = 1ll*sqrt(aim+0.5);
					ull ans = aim;
					for(ull i = 2;i <= sq;++i) 
						if(aim%i == 0) {
							ans = ans/i*(i-1);
							while(!(aim%i)) 
								aim /= i;
						}
					if(aim > 1) ans = ans/aim*(aim-1);
					return ans;
				}

\(\qquad\qquad\qquad\color{orange}{\text{7.4.3 线性求法}}\)

				ull primeLine[z];
				bool primeIs[z] = {1,1};
				ull phiLine[z];
				void linePhi(ull n) {
				    phiLine[1] = 1;
				    for(ull i = 2;i <= n;++i) {
				        if(!primeIs[i]) {
				            primeLine[++primeLine[0]] = i;
				            phiLine[i] = i-1;
				        }
				        for(int j = 1;j <= primeLine[0]&&i*primeLine[j] <= n;++j) {
				            primeIs[i*primeLine[j]] = true;
				            if(!(i%primeLine[j])) {
				                phiLine[i*primeLine[j]] = primeLine[j]*phiLine[i];
				                break;
				            } else {
				                phiLine[i*primeLine[j]] = (primeLine[j]-1)*phiLine[i];
				            }
				        }
				    }
				}

\(\qquad\color{brown}{\text{7.5 莫比乌斯函数}}\)

\(\qquad\qquad\qquad\color{orange}{\text{7.5.1 性质}}\)

\(\qquad\qquad\qquad\quad\text{莫比乌斯函数的一个重要性质是:}\sum\limits_{d\mid n}\mu(d)=\delta_{1,n}\)

\(\qquad\qquad\qquad\quad\text{注}:\delta_{a,b}=\begin{cases}1&a=b\\0&a\not=b\\\end{cases}\)

\(\qquad\qquad\qquad\quad n=1\text{显然},\)

\(\qquad\qquad\qquad\color{orange}{\text{7.5.2 莫比乌斯反演}}\)

\(\qquad\qquad\qquad\quad\text{接下来我们来证明莫比乌斯反演}:\)

\(\qquad\qquad\qquad\quad\text{若}f(n)=\sum\limits_{d\mid n}g(d),\text{则}g(n)=\sum\limits_{d\mid n}(\mu(\tfrac{n}{d})\times f(d))\)

\(\qquad\qquad\qquad\quad\begin{aligned}\sum\limits_{d\mid n}(\mu(\tfrac{n}{d})\times f(d))=\sum\limits_{d\mid n}(\mu(\tfrac{n}{d})\times\sum\limits_{e\mid d}g(e)\end{aligned}\)

\(\qquad\qquad\qquad\qquad\qquad\qquad\qquad\ \ \begin{aligned} &=\sum\limits_{e\mid n}(g(e)\times\sum\limits_{e\mid d\mid n}\mu(\tfrac{n}{d}))\cr &\text{记}d = e\times x\cr &=\sum\limits_{e\mid n}(g(e)\times\sum\limits_{x\mid\tfrac{n}{e}}\mu(\frac{\tfrac{n}{e}}{x}))\cr &=\sum\limits_{e\mid n}(g(e)\times\delta_{1,\tfrac{n}{e}})\cr &=g(n) \end{aligned}\)

\(\qquad\qquad\qquad\quad\text{它还有乘积形式:}\)

\(\qquad\qquad\qquad\quad\text{若}f(n)=\prod\limits_{d\mid n}g(d),\text{则}g(n)=\prod\limits_{d\mid n}{f(d)}^{\mu(\tfrac{n}{d})}\)

\(\qquad\qquad\qquad\color{orange}{\text{7.5.3 无平方因子数}}\)

\(\qquad\qquad\qquad\quad\text{我们定义}Q(n)\text{为}\left[1,n\right]\text{中的无平方因子数的个数},\text{则:}\)

\[\qquad\qquad\qquad\quad Q(n)=\sum\limits_{k\le\sqrt n}(\mu(k)\times\left\lfloor\frac{n}{k^2}\right\rfloor) \]

\(\color{red}{\textbf{8.费马小定理和欧拉定理}}\)

\(\qquad\color{brown}{\text{8.1 费马小定理}}\)

\(\color{orange}{\qquad\qquad\qquad\text{8.1.1 费马小定理}}\)

\[\qquad\qquad\qquad\quad\text{对于素数}p\text{和正整数}a,\text{有}a^p\equiv a\pmod p \]

\(\color{orange}{\qquad\qquad\qquad\text{8.1.2 证明}}\)

\(\color{orange}{\qquad\qquad\qquad\text{8.1.3 一些推论}}\)

\(\qquad\color{brown}{\text{8.2 欧拉定理}}\)

\(\color{orange}{\qquad\qquad\qquad\text{8.2.1 欧拉定理}}\)

\[\qquad\qquad\qquad\quad\text{若}a,n\in N_+,\gcd(a,n)=1,\text{则}a^{\varphi(n)}\equiv 1\pmod n \]

\(\qquad\color{brown}{\text{8.3 扩展欧拉定理}}\)

\(\color{orange}{\qquad\qquad\qquad\text{8.3.1 扩展欧拉定理}}\)

\[\qquad\qquad\qquad\quad a^b=\begin{cases} a^{b \bmod \varphi(n)}&gcd(a,n)=1\\ a^b&gcd(a,n)\not=1,b < \varphi(n)\quad\pmod m\\ a^{(b\bmod \varphi(n))+\varphi(n)}&gcd(a,n)\not=1,b\ge\varphi(n)\\ \end{cases}\]

\(\color{red}{\textbf{9.乘法逆元}}\)

\(\qquad\color{brown}{\text{9.1 费马小定理}}\)

\(\qquad\qquad\qquad\quad\text{由费马小定理可得:}a\text{在模质数}p\text{意义下的逆元为}a^{p-2}\)

				ull quick_pow(ull a,ull n,ull p) {
					ull res = 1;
					a %= p;
					while(n) {
						if(n&1) res = res*a%p;
						a = a*a%p;
						n >>= 1;
					}
					return res;
				}
				ull p_inv(ull a,ull p) {
					return quick_pow(a,p-2,p);
				}

\(\qquad\color{brown}{\text{9.2 欧拉定理}}\)

\(\qquad\qquad\qquad\quad\text{有欧拉定理可得:若}\gcd(a,n)=1\text{则}a\text{在模}n\text{意义下的逆元为}a^{\varphi(n)-1}\)

\(\qquad\qquad\qquad\quad\text{我们不用担心这种方法求逆元会受到限制,因为如果}\gcd(a,n)\not=1,\)

\(\qquad\qquad\qquad\quad\text{则不存在}a\text{模}n\text{意义下的逆元}\)

\(\qquad\color{brown}{\text{9.3 扩展欧几里得}}\)

\(\qquad\qquad\qquad\quad\text{由于}a\text{在模}n\text{意义下的逆元}x\text{满足}a\times x\equiv1\pmod n\)

\(\qquad\qquad\qquad\quad\text{所以有方程}a\times x+n\times y=1,\text{根据逆元性质},\gcd(a,n)=1,\)

\(\qquad\qquad\qquad\quad\text{所以解方程}a\times x+n\times y=\gcd(a,n)\text{即可}\)

				ull ex_gcd(ull a,ull b,ull &x,ull &y) {
					if(!b) {
						x = 1, y = 0;
						return a;
					}
					ull res = ex_gcd(b,a%b,x,y);
					ull tmp = x;
					x = y;
					y = tmp-a/b*y;
					return res;
				}
				ull gcd_inv(ull a,ull p) {
					ull x, y;
					ull tmp = ex_gcd(a,p,x,y);
					if(tmp != 1) return -1;
					return ((x%p)+p)%p;
				}

\(\qquad\color{brown}{\text{9.4 线性求逆元}}\)

				ull inv[size];
				void line_inv(ull n,ull p) {
					inv[1] = 1;
					for(ull i = 2;i <= n;++i) 
						inv[i] = 1ll*(p-p/i)*inv[p%i]%p;
					return;
				}

\(\color{red}{\textbf{10.中国剩余定理}}\)

\(\qquad\color{brown}{\text{10.1 中国剩余定理}}\)

\(\qquad\qquad\qquad\quad\text{我们现在有一个同余方程组如下}:\)

\(\qquad\qquad\qquad\quad\begin{cases} x\equiv a_1\pmod{m_1}\\ \qquad\qquad\quad x\equiv a_2\pmod{m_2}\\ \quad\vdots\\ x\equiv a_n\pmod{m_n}\\ \end{cases}\)

\(\qquad\qquad\qquad\quad\text{其中}m_1,m_2,\cdots,m_n\text{两两互质}\)

\(\qquad\qquad\qquad\quad\text{那么设}M = \prod\limits_{i=1}^{n}m_i,M_i=\dfrac{M}{m_i},inv_i\text{为}M_i\text{在模}m_i\text{意义下的逆元}\)

\(\qquad\qquad\qquad\quad\text{则方程组有一特解为}x_0=\sum\limits_{i=1}^{n}(M_i\times a_i\times inv_i)\)

\(\qquad\qquad\qquad\quad\text{同时这个方程的通解为}x=x_0+k\times M(M\in Z)\)

\(\qquad\qquad\qquad\quad\text{此时我们就可以通过算乘法逆元来求解此同余方程组了}\)

				ull ex_gcd(ull a,ull b,ull &x,ull &y) {
					if(!b) {
						x = 1,  y = 0;
						return a;
					}
					ull res = ex_gcd(b,a%b,x,y);
					ull tmp = x;
					x = y;
					y = tmp-a/b*y;
					return res;
				}
				ull CRT(const ull n,ull *m,ull *a) {
					ull M = 1, Mi, x, y, res = 0;
					for(int i = 1;i <= n;++i) 
						M *= m[i];
					for(int i = 1;i <= n;++i) {
						Mi = M/m[i];
						ex_gcd(Mi,m[i],x,y);
						res += (a[i]*Mi%M*x%M+M)%M;
					}
					return (res%M+M)%M;
				}

\(\qquad\color{brown}{\text{10.2 扩展中国剩余定理}}\)

\(\qquad\qquad\qquad\quad\text{现在出题人不想让}m_1,m_2,\cdots,m_n\text{两两互质了}\)

\(\qquad\qquad\qquad\quad\text{我们的思路是先把两个方程合在一起,解此方程组,同时判断是否有解}\)

\(\qquad\qquad\qquad\quad\text{最后得出整个方程组的解}\)

				ull ex_gcd(ull a,ull b,ull &x,ull &y) {
				    if(!b) {
				        x = 1,  y = 0;
				        return a;
				    }
				    ull res = ex_gcd(b,a%b,x,y);
				    ull tmp = x;
				    x = y;
 				    y = tmp-a/b*y;
				    return res;
				}
				void per_CRT(ull &a1,ull &a2,ull &m1,ull &m2,bool &flag) {
				    ull delta = a2-a1, x, y;
				    ull mgcd = ex_gcd(m1,m2,x,y);
				    if(!(delta%mgcd)) {
				        x = ((x*delta/mgcd)%(m2/mgcd)+(m2/mgcd))%(m2/mgcd);
				        a1 = x*m1+a1;
				        m1 = m1*m2/mgcd;
				    } else flag = true;
				}
				ull ex_CRT(ull n,ull *a,ull *m) {
				    for(int i = 2;i <= n;++i) {
				        bool flag = false;
				        per_CRT(a[1],a[i],m[1],m[i],flag);
				        if(flag) return -1;
				    }
				    return a[1];
				}

\(\color{red}{\textbf{11.卢卡斯定理}}\)

\(\qquad\color{brown}{\text{11.1 卢卡斯定理}}\)

\(\color{orange}{\qquad\qquad\qquad\text{11.1.1 Lucas 定理}}\)

\(\qquad\qquad\qquad\quad\text{设}:\)

\[\qquad\qquad\qquad\quad n = n_k\times p^k+n_{k-1}\times p^{k-1}+\cdots+n_0 \]

\[\qquad\qquad\qquad\quad m = m_k\times p^k+m_{k-1}\times p^{k-1}+\cdots+m_0 \]

\(\qquad\qquad\qquad\quad\text{分别为}n,m\text{的}p\text{进制表达式}\)

\(\qquad\qquad\qquad\quad\text{则有}:\)

\[\qquad\qquad\qquad\quad C_{n}^{m} = \prod\limits_{i=0}^{k}C_{n_i}^{m_i}\pmod p \]

\(\qquad\qquad\qquad\quad\text{那么我们一路递归求下去就好了}\)

				ull Lucas(ull n,ull m,ull p) {
					if(!m) return 1;
					return C(n%p,m%p,p)*Lucas(n/p,m/p,p)%p;
				}

\(\color{orange}{\qquad\qquad\qquad\text{11.1.2 证明}}\)

\(\qquad\color{brown}{\text{11.2 扩展卢卡斯定理}}\)

\(\color{orange}{\qquad\qquad\qquad\text{11.2.1 Ex-Lucas 定理}}\)

				const int size = 1024;
				#define ull long long
				ull quick_pow(ull a,ull n,ull p) {
					ull res = 1;
					a %= p;
					while(n) {
						if(n&1) res = res*a%p;
						a = a*a%p;
						n >>= 1;
					}
					return res;
				}
				void ex_gcd(ull a,ull b,ull &x,ull &y) {
					if(!b) {
						x = 1, y = 0;
						return;
					}
					ex_gcd(b,a%b,x,y);
					ull tmp = x;
					x = y;
					y = tmp-a/b*y;
				}
				ull inv(ull n,ull p) {
					ull x, y;
					ex_gcd(n,p,x,y);
					return (x%p+p)%p;
				}
				inline ull roll(ull n,ull x,ull p) {
					if(n == 0) return 1;
					ull ret = 1, rem = 1;
					for(ull i = 1;i <= p;++i) 
						if(i%x) ret = ret*i%p;
					ret = quick_pow(ret,n/p,p);
					for(ull i = p*(n/p);i <= n;++i) 
						if(i%x) rem = rem*(i%p)%p;
					return roll(n/x,x,p)*ret%p*rem%p;
				}
				inline ull get(ull n,ull x) {
					if(n < x) return 0;
					return get(n/x,x)+(n/x);
				}
				ull multiLucas(ull m,ull n,ull x,ull p) {
					ull ror = roll(n,x,p);
					ull tmp1 = inv(roll(m,x,p),p), tmp2 = inv(roll(n-m,x,p),p);
					ull mi = quick_pow(x,get(n,x)-get(m,x)-get(n-m,x),p);
					return ror*tmp1%p*tmp2%p*mi%p;
				}
				ull exLucas(ull m,ull n,ull p) {
					ull moyn = p;
					ull bit[size] = {0}, a[size];
					for(ull i = 2, temp;i*i <= p;++i) 
						if(p%i == 0) {
							temp = 1;
							while(moyn%i == 0) {
								temp *= i;
								moyn /= i;
							}
							bit[++bit[0]] = temp;
							a[bit[0]] = multiLucas(m,n,i,temp);
						}
					if(moyn != 1) {
						bit[++bit[0]] = moyn;
						a[bit[0]] = multiLucas(m,n,moyn,moyn);
					}
					ull ans = 0;
					for(ull i = 1;i <= bit[0];++i) {
						ull h = p/bit[i];
						ull k = inv(h,bit[i]);
						ans = (ans+a[i]*h%p*k%p)%p;
					}
					return ans;
				}

\(\color{white}{end}\)

\(\color{red}{\textbf{12.阶与原根}}\)

\(\qquad\color{brown}{\text{12.1 阶}}\)

\(\color{orange}{\qquad\qquad\qquad\text{12.1.1 定义}}\)

\(\qquad\qquad\qquad\quad\)满足\(a^n\equiv 1\pmod m\)的最小正整数\(n\)称作\(a\)\(m\)的阶,记为\(\delta_m(a)\)

\(\color{orange}{\qquad\qquad\qquad\text{12.1.2 性质}}\)

\(\qquad\qquad\qquad\quad\) 1.\(a,a^2,\cdots,a^{\delta_m(a)}\)\(m\)两两不同余。

\(\qquad\qquad\qquad\quad\) 2.若\(a^n\equiv 1\pmod m\),则\(\delta_m(a)\mid n\)

\(\qquad\qquad\qquad\quad\) 3.若\(a^p\equiv a^q\pmod m\),则\(p\equiv q\pmod {\delta_m(a)}\)

\(\qquad\qquad\qquad\quad\) 4.若\(\gcd(a,m)=\gcd(b,m)=1\),则\(\delta_m(a\cdot b)=\delta_m(a)\cdot\delta_m(b)\iff\gcd(\delta_m(a),\delta_m(b))=1\)

\(\qquad\qquad\qquad\quad\) 5.若\(\gcd(a,m) = 1\),则\(\delta_m(a^k)=\dfrac{\delta_m(a)}{\gcd(\delta_m(a),k)}\)

\(\qquad\color{brown}{\text{12.2 原根}}\)

\(\color{orange}{\qquad\qquad\qquad\text{12.2.1 定义}}\)

\(\qquad\qquad\qquad\quad\)\(gcd(a,m)=1\)\(\delta_m(a)=\varphi(m)\),则称\(a\)为模\(m\)的原根。

\(\color{orange}{\qquad\qquad\qquad\text{12.2.2 性质}}\)

\(\qquad\qquad\qquad\quad\) 1.若\(m\ge 3,\gcd(a,m)=1\),则\(a\text{是模}m\text{的原根}\iff \forall p\text{是素数}\mid \varphi(m),a^{\frac{\varphi(m)}{p}}\not\equiv 1\pmod m\)(判定定理)

\(\qquad\qquad\qquad\quad\) 2.若\(m\)有原根,则\(m\)\(\varphi(\varphi(m))\)个原根。(个数)

\(\qquad\qquad\qquad\quad\) 3.\(m\text{存在原根}\iff m=2,4,p^k,2\cdot p^k\ (k\in\mathbb{N}_+,p\text{为素数})\)(存在定理)

\(\qquad\qquad\qquad\quad\) 4.若\(m\)有原根,则最小原根不多于\(m^{0.25}\)(这个好离谱,不过我们可以暴力找原根了)

@bikuhiku

posted @ 2022-06-04 19:16  bikuhiku  阅读(14)  评论(0编辑  收藏  举报