大家以我为戒 千万不要这么学 oi (
todolist 会越鸽越长的
高代那部分莫名其妙写了一大堆 其实我写完之后也没复习过几遍。。
而且千万不要抄看起来很厉害实际上也很厉害的东西抄爽了,,
更不要太纠结于各种各样用不到的新定义和名字 这些可以有需要的时候再顺其自然
这篇博文在一些中等难度的知识点上可能偶尔会有那么一些十分集中出现的干货
水货很多
可以用来锻炼自己获取有效信息的能力(
下面就全部是我以前写的了,也没有什么修改
而且我的电脑带不动这么长的博客(
三元环
干货 https://www.cnblogs.com/ppprseter/p/10139342.html
数论函数从入门到min25 https://blog.csdn.net/zhouyuheng2003/article/details/84798775
基础数论 总结 https://www.cnblogs.com/meowww/p/6400841.html
http://www.cppblog.com/menjitianya/archive/2015/12/02/212395.html
https://www.cnblogs.com/gzy-cjoier/p/8206944.html
https://www.cnblogs.com/gzy-cjoier/p/9741950.html
https://www.luogu.org/blog/hdxrie/yuan-gen
https://blog.csdn.net/myjs999/article/details/81133555
https://blog.csdn.net/WAautomaton/article/details/82667522
https://blog.csdn.net/qq_33184171/article/details/51488462
https://blog.csdn.net/ez_2016gdgzoi471/article/details/81416333
https://blog.csdn.net/zhulinzhulinlin/article/details/78649153
https://blog.csdn.net/werkeytom_ftd/article/details/74701513
自适应simpson
复化cotes simpson https://blog.csdn.net/Alearn_/article/details/80461258
伯努利数
自然数幂和&子集和 https://www.cnblogs.com/ppprseter/p/10139342.html
k次幂和
https://www.cnblogs.com/gzy-cjoier/p/9362368.html
https://blog.csdn.net/my_sunshine26/article/details/72772637
https://www.cnblogs.com/ppprseter/p/10017738.html
Cohen-Sutherland
反素数、原根、指标、BSGS(被埋了。。。)
高斯消元、线性基(也被埋了。。。)
牛顿迭代&stirling近似&递推数列循环节(都被埋了)
欧拉函数那里,补上几道题。一定要带仪仗队(
放在三角函数那里当练习题 https://ac.2333.moe/Problem/view.xhtml?id=1668
计算几何poj1039
真实数竞(数论+整除)https://blog.csdn.net/u014609452/article/details/72835428
特征根法(在矩阵快速幂下边)https://blog.csdn.net/qq_40515553/article/details/80418944
csdn katex https://katex.org/docs/supported.html
fibonacci 综合题 https://blog.csdn.net/qq_35950004/article/details/79359284
https://blog.csdn.net/qq_35950004/article/details/79851479 线段交点模板
状态分块优化转移 https://blog.csdn.net/qq_35950004/article/details/80792343
牛逼依赖背包+单调性 https://blog.csdn.net/qq_35950004/article/details/83793032
acm math https://blog.csdn.net/xh_reventon/article/details/25662705
莫反简化 https://www.cnblogs.com/chenyang920/p/4811995.html
因为我比较菜,文中可能出现一些错误?(
这篇博客是一边学习+复习的过程中写的,所以一些地方可能会略去某些内容。
文中一些部分会有Problem List,其中对题目的描述格式大致如下:
Difficulty… Problem Id&Link(Solution)… Note
其中的备注(Note)部分的内容一般是写这道题目用到的算法、思想一类;
但是为了防止剧透,可能会在里面加一些模糊的甚至带有误导性的备注。
不过一定还是跟题目相关的。会备注的都是解这道题目应该掌握/建议掌握的知识。
当然,不是要用到的都会标记上去。只会根据具体情况标记一部分。
比如说,我不可能在后面的组合计数那里特地标一下要会逆元。
我也不会在莫比乌斯反演那些地方跟你说要会 μ \mu μ(emmm)
高中数学课本很好的,相信我(
等差数列通项 a n = a 1 + ( n − 1 ) d a_n=a_1+(n-1)d an=a1+(n−1)d
等差数列求和 ∑ i = 1 n a i = a 1 ⋅ n + n ( n − 1 ) 2 ⋅ d \displaystyle\sum\limits_{i=1}^n a_i=a_1\cdot n+\dfrac{n(n-1)}{2}\cdot d i=1∑nai=a1⋅n+2n(n−1)⋅d
= ( a 1 + a n ) n 2 =\dfrac{(a_1+a_n)n}{2} =2(a1+an)n
等比数列通项 a n = a 1 q n − 1 a_n=a_1q^{n-1} an=a1qn−1
等比数列求和 ∑ i = 1 n a i = a 1 ⋅ 1 − q n 1 − q = a 1 − a n ⋅ q 1 − q \displaystyle\sum\limits_{i=1}^n a_i=a_1\cdot\dfrac{1-q^n}{1-q}=\dfrac{a_1-a_n\cdot q}{1-q} i=1∑nai=a1⋅1−q1−qn=1−qa1−an⋅q
http://acm.hdu.edu.cn/showproblem.php?pid=4565
我们定义域为 N ∗ \N^* N∗,陪域为 C \mathbb C C(复数域)的函数为数论函数。
每个数论函数都可以视为复数的序列。
对数论函数 f ( x ) f(x) f(x), ∀ a , b ∈ N ∗ \mathbf\forall a,b\in\N^* ∀a,b∈N∗、 ( a , b ) = 1 (a,b)=1 (a,b)=1,若 f ( a b ) = f ( a ) f ( b ) f(ab)=f(a)f(b) f(ab)=f(a)f(b),称 f ( x ) f(x) f(x)为积性函数。
如果 ∀ a , b ∈ N ∗ \mathbf\forall a,b\in\N^* ∀a,b∈N∗, f ( a b ) = f ( a ) f ( b ) f(ab)=f(a)f(b) f(ab)=f(a)f(b),称 f ( x ) f(x) f(x)为完全积性函数。
加性函数: ∀ a , b ∈ N ∗ \mathbf\forall a,b\in\N^* ∀a,b∈N∗、 ( a , b ) = 1 (a,b)=1 (a,b)=1, f ( a b ) = f ( a ) + f ( b ) f(ab)=f(a)+f(b) f(ab)=f(a)+f(b)
完全加性函数: ∀ a , b ∈ N ∗ \mathbf\forall a,b\in\N^* ∀a,b∈N∗, f ( a b ) = f ( a ) + f ( b ) f(ab)=f(a)+f(b) f(ab)=f(a)+f(b)
对于数论函数集,以狄利克雷卷积为乘法,一般函数加法作为加法,可以得到一个Abel环。
积性函数+唯一分解定理有一个性质: f ( n ) = ∏ i = 1 ω ( n ) f ( p i a i ) f(n)=\large{\prod\limits_{i=1}^{\omega(n)}}\normalsize{ f(p_i^{a_i})} f(n)=i=1∏ω(n)f(piai)
PS:Iverson bracket
[ P ] = { 1 I f P i s t r u e 0 O t h e r w i s e . \mathcal{[P]=\begin{cases}1\qquad\mathcal{If\;P\;is\;true}\\0\qquad \mathcal{Otherwise.}\end{cases}} [P]={ 1IfPistrue0Otherwise.
PS:记min和max我好像没有翻到什么统一的标准?暂且这么记吧:
min l i m i t s { e l e m e n t s } \min\limits_{limits}\{elements\} limitsmin{ elements}
max l i m i t s { e l e m e n t s } \max\limits_{limits}\{elements\} limitsmax{ elements}
min l i m i t s e l e m e n t s \min\limits_{limits}{elements} limitsminelements
max l i m i t s e l e m e n t s \max\limits_{limits}{elements} limitsmaxelements有时候可能会变成其他形式?总之能够看起来(大概)好看就行(
首先,对于 n n n,素因子数 ω ( n ) = ∑ d ∣ n [ ϕ ( d ) = d − 1 ] \omega(n)=\sum\limits_{d|n}\small[\phi(d)=d-1] ω(n)=d∣n∑[ϕ(d)=d−1]。这个不是积性函数;它是加性函数。
对于 n = ∏ i = 1 ω ( n ) p i a i n=\prod\limits_{i=1}^{\omega(n)}p_i^{a_i} n=i=1∏ω(n)piai( p i p_i pi为质数):
加性函数
素因子数(不计重数) ω ( n ) = ∑ d ∣ n [ ϕ ( d ) = d − 1 ] \omega(n)=\sum\limits_{d|n}\small[\phi(d)=d-1] ω(n)=d∣n∑[ϕ(d)=d−1]
素因子和(不计重数)完全加性函数
素因子数(计算重数) Ω ( n ) = ∑ d ∣ n a i [ ϕ ( d ) = d − 1 ] \Omega(n)=\sum\limits_{d|n}a_i\small[\phi(d)=d-1] Ω(n)=d∣n∑ai[ϕ(d)=d−1]
素因子和(计算重数)完全积性函数
1 ( n ) = 1 \mathbf1(n)=1 1(n)=1,这是一个常函数。
单位函数 I d ( n ) = n \mathbf{Id}(n)=n Id(n)=n
幂函数 I d k ( n ) = n k \mathbf{Id^k}(n)=n^k Idk(n)=nk
D i r c h l e t \frak{Dirchlet} Dirchlet卷积的单位元 ϵ ( n ) = [ n = 1 ] \epsilon(n)=[n=1] ϵ(n)=[n=1]积性函数
g c d ( n , k ) gcd(n,k) gcd(n,k),当 n n n为常数时;
欧拉函数 ϕ ( n ) = n ∏ i = 1 ω ( n ) ( 1 − 1 p i ) \phi(n)=n\prod\limits_{i=1}^{\omega(n)}(1-\frac{1}{p_i}) ϕ(n)=ni=1∏ω(n)(1−pi1)
正因子数 d ( n ) = ∑ d ∣ n 1 \mathbf d(n)=\sum\limits_{d|n}1 d(n)=d∣n∑1
正因子和 σ ( n ) = ∑ d ∣ n d \sigma(n)=\sum\limits_{d|n}d σ(n)=d∣n∑d
因子函数 σ k ( n ) = ∑ d ∣ n d k \sigma_k(n)=\sum\limits_{d|n}d^k σk(n)=d∣n∑dk其中 k ∈ C k\in\mathbb C k∈C
我也不知道它叫什么但是 γ ( n ) = ( − 1 ) ω ( n ) \gamma(n)=(-1)^{\omega(n)} γ(n)=(−1)ω(n)
刘维尔函数 λ L i o u v i l l e ( n ) = ( − 1 ) Ω ( n ) \lambda_{\frak{Liouville}}{(n)}=(-1)^{\Omega(n)} λLiouville(n)=(−1)Ω(n)
莫比乌斯函数【证明】
μ ( n ) = δ ω ( n ) Ω ( n ) λ n = [ ( max 1 ≤ i ≤ ω ( n ) a i ) ≤ 1 ] ( − 1 ) ω ( n ) = { 1 n = 1 ( − 1 ) k n = ∏ i = 1 ω ( n ) p i 0 O t h e r w i s e . \mu(n)=\delta_{\omega(n)\Omega(n)}\lambda{n}=\left[\left(\max\limits_{1\le i\le\omega(n)}a_i\right)\le1\right](-1)^{\omega(n)}=\begin{cases}\begin{gathered}1&n=1\\(-1)^k&n=\prod\limits_{i=1}^{\omega(n)}p_i\\0&\mathcal{Otherwise.}\end{gathered}\end{cases} μ(n)=δω(n)Ω(n)λn=[(1≤i≤ω(n)maxai)≤1](−1)ω(n)=⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧1(−1)k0n=1n=i=1∏ω(n)piOtherwise.卡迈克尔函数 λ C a r m i c h a e l ( n ) = { 1 2 ϕ ( n ) n = 2 k ∧ n , k ∈ N ∗ ∧ k ≥ 3 ϕ ( n ) O t h e r w i s e . \lambda_{\frak{Carmichael}}(n)=\begin{cases}\begin{gathered}\frac{1}{2}\phi(n)&n=2^k\land n,k\in\N^*\land k\ge3\\\phi(n)&\mathcal{Otherwise.}\end{gathered}\end{cases} λCarmichael(n)=⎩⎨⎧21ϕ(n)ϕ(n)n=2k∧n,k∈N∗∧k≥3Otherwise.
性质
λ L i o u v i l l e ( n ) = ∑ d 2 ∣ n μ ( n d 2 ) \lambda_{\frak{Liouville}}{(n)}=\displaystyle\sum\limits_{d^{^{_\mathcal2}}|n}\mu\left(\frac{ n}{d^{^{_\mathcal2}}}\right) λLiouville(n)=d2∣n∑μ(d2n)
1 ∗ μ = μ ∗ 1 = ϵ 1*\mu=\mu*1=\epsilon 1∗μ=μ∗1=ϵ
1 ∗ ϕ = ϕ ∗ 1 = i d 1*\phi=\phi*1=id 1∗ϕ=ϕ∗1=id
给定 n ∈ N ∗ n\in\N^* n∈N∗, ∀ m ∈ N ∗ \mathbf\forall m\in\N^* ∀m∈N∗, ⌊ n m ⌋ \left\lfloor\dfrac{n}{m}\right\rfloor ⌊mn⌋的取值只有 O ( n ) O(\sqrt{n}) O(n)种。
证明以 n \sqrt{n} n为界分类讨论即可,略。
记小于 x x x的素数个数 π ( x ) \pi(x) π(x)。
lim x → + ∞ π ( x ) ⋅ ln ( x ) x = 1 \lim\limits_{x\to+\infty}\cfrac{\pi(x)\cdot\ln(x)}{x}=1 x→+∞limxπ(x)⋅ln(x)=1
也即: lim x → + ∞ π ( x ) = x ln ( x ) \lim\limits_{x\to+\infty}\pi(x)=\cfrac{x}{\ln(x)} x→+∞limπ(x)=ln(x)x
可以认为 π ( x ) = O ( x ln x ) \pi(x)=O\left(\dfrac{x}{\ln x}\right) π(x)=O(lnxx)
令 ω ( n ) \omega(n) ω(n)表示 n n n的质因子个数。(规定 ω ( 1 ) = 0 \omega(1)=0 ω(1)=0)
∀ n ∈ N ∗ , n = ∏ i = 1 ω ( n ) p i a i \mathbf\forall n\in\N^*,\displaystyle{n=\prod\limits_{i=1}^{\omega(n)}}{p_{_i}}^{a_{_i}} ∀n∈N∗,n=i=1∏ω(n)piai
重要推论
Ⅰ ∀ n ∈ N ∗ \mathbf\forall n\in\N^* ∀n∈N∗且 n > 1 n>1 n>1, n = ∏ i = 1 ω ( n ) p i a i \displaystyle{n=\prod\limits_{i=1}^{\omega(n)}}{p_{_i}}^{a_{_i}} n=i=1∏ω(n)piai,其正因数个数为: d ( n ) = ∏ i = 1 ω ( n ) ( 1 + a i ) \mathbf d(n)=\displaystyle\prod\limits_{i=1}^{\omega(n)}(1+a_{_i}) d(n)=i=1∏ω(n)(1+ai)
Ⅱ (因数和公式) ∀ n ∈ N ∗ \mathbf\forall n\in\N^* ∀n∈N∗且 n > 1 n>1 n>1, n = ∏ i = 1 ω ( n ) p i a i \displaystyle{n=\prod\limits_{i=1}^{\omega(n)}}{p_{_i}}^{a_{_i}} n=i=1∏ω(n)piai,其正因数和 σ ( n ) = ∏ i = 1 ω ( n ) ∑ j = 0 a i p i j \mathcal{\sigma(n)=\displaystyle\prod\limits_{i=1}^{\omega(n)}\sum\limits_{j=0}^{a_{_i}}{p_{_i}}^j} σ(n)=i=1∏ω(n)j=0∑aipij
Ⅲ a b = ( a , b ) [ a , b ] ab=(a,b)[a,b] ab=(a,b)[a,b]。其中 ( a , b ) (a,b) (a,b)表示 a a a和 b b b的最大公约数, [ a , b ] [a,b] [a,b]表示 a a a和 b b b的最小公倍数。
Ⅳ 素数个数无限。
Problem List
★★☆☆☆☆☆☆☆☆ hdu4497 唯一分解定理+容斥原理
★★☆☆☆☆☆☆☆☆ hdu1852 唯一分解定理+逆元+快速幂
定义相信大家都知道(
记号: g c d ( a , b ) gcd(a,b) gcd(a,b)记作 ( a , b ) (a,b) (a,b), l c m ( a , b ) lcm(a,b) lcm(a,b)记作 [ a , b ] [a,b] [a,b]
后面可能会混用(?
唯一分解定理可以推出它们的指数最值表示法:
由 a = ∏ i = 1 ω ( a ) p i a i \displaystyle{a=\prod\limits_{i=1}^{\omega(a)}}{p_{_i}}^{a_{_i}} a=i=1∏ω(a)piai, b = ∏ i = 1 ω ( b ) p i b i \displaystyle{b=\prod\limits_{i=1}^{\omega(b)}}{p_{_i}}^{b_{_i}} b=i=1∏ω(b)pibi有
( a , b ) = ∏ i = 1 min { ω ( a ) , ω ( b ) } p i min { a i , b i } \displaystyle{(a,b)=\prod\limits_{i=1}^{\min\{\omega(a),\omega(b)\}}}{p_{_i}}^{\min\{a_{_i},b_{_i}\}} (a,b)=i=1∏min{ ω(a),ω(b)}pimin{ ai,bi}
[ a , b ] = ∏ i = 1 max { ω ( a ) , ω ( b ) } p i max { a i , b i } \displaystyle{[a,b]=\prod\limits_{i=1}^{\max\{\omega(a),\omega(b)\}}}{p_{_i}}^{\max\{a_{_i},b_{_i}\}} [a,b]=i=1∏max{ ω(a),ω(b)}pimax{ ai,bi}
一个性质: ( n , m ) = 1 ⇔ ( n , n − m ) = 1 (n,m)=1\Leftrightarrow(n,n-m)=1 (n,m)=1⇔(n,n−m)=1( n > m n>m n>m)。跟 ( n m ) = ( n n − m ) \binom{n}{m}=\binom{n}{n-m} (mn)=(n−mn)形式比较像?
证明很显然。
推论:与n互质的数的平均数是n/2,和为φ(n)·n/2。
把指数二进制拆分,取base倍增
就可以logn啦。不多讲(
对于 ∀ a , b ∈ Z \mathbf\forall a,b\in\Z ∀a,b∈Z, ∀ x , y ∈ Z \mathbf\forall x,y\in\Z ∀x,y∈Z有 ( a , b ) ∣ ( a x + b y ) (a,b)|(ax+by) (a,b)∣(ax+by)。
其每组解 x , y x,y x,y称为裴蜀数。
特别地:一定存在 x , y ∈ Z x,y\in\Z x,y∈Z满足 a x + b y = ( a , b ) ax+by=(a,b) ax+by=(a,b)。
证明:
设 μ = g c d ( a , b ) \mu=gcd(a,b) μ=gcd(a,b),则 μ ∣ a , μ ∣ b \mu|a,\mu|b μ∣a,μ∣b, ∀ x , y ∈ Z \mathbf\forall x,y\in\Z ∀x,y∈Z有 μ ∣ ( a x + b y ) \mu|(ax+by) μ∣(ax+by)。设 s = min a x + b y > 0 ( a x + b y ) s=\min\limits_{ax+by>0}{(ax+by)} s=ax+by>0min(ax+by)则 μ ∣ s \mu|s μ∣s。
令 q = ⌊ a s ⌋ , r = a m o d s = a − q ( a x + b y ) = a ( 1 − q x ) + b q y q=\left\lfloor\dfrac{a}{s}\right\rfloor,r=a\mod s=a-q(ax+by)=a(1-qx)+bqy q=⌊sa⌋,r=amods=a−q(ax+by)=a(1−qx)+bqy,
则: r r r为 a , b a,b a,b的线性组合, r ∈ N r\in\N r∈N。且 s s s是 a , b a,b a,b线性组合的最小正值, 0 ≤ r < s 0\le r0≤r<s,则 r = 0 r=0 r=0。
那么 s ∣ a , s ∣ b , s ∣ μ s|a,s|b,s|\mu s∣a,s∣b,s∣μ,即 s = μ s=\mu s=μ。
实际上(就理解来说)是很显然的,设 d = ( a , b ) d=(a,b) d=(a,b), a = A d , b = B d a=Ad,b=Bd a=Ad,b=Bd( A , B ∈ Z A,B\in\Z A,B∈Z)
又 x , y ∈ Z x,y\in\Z x,y∈Z于是 ( a x + b y ) = C d (ax+by)=Cd (ax+by)=Cd( C ∈ Z C\in\Z C∈Z)那么 d ∣ ( a x + b y ) d|(ax+by) d∣(ax+by)即 ( a , b ) ∣ ( a x + b y ) (a,b)|(ax+by) (a,b)∣(ax+by)
另一个形式: a x + b y = m ax+by=m ax+by=m有解当且仅当 m = k ( a , b ) m=k(a,b) m=k(a,b), k ∈ Z k\in\Z k∈Z。
重要推论: a , b a,b a,b互质的充要条件是 ∃ x , y ∈ Z \mathbf\exists x,y\in\Z ∃x,y∈Z使 a x + b y = 1 ax+by=1 ax+by=1。
不必了解的是,裴蜀定理可以推广到任意的主理想环上。
对主理想环 A A A、环中元素 a , b a,b a,b和它们的一个最大公约元 d d d,存在环中元素 x , y x,y x,y使 a x + b y = d ax+by=d ax+by=d。
这是因为在主理想环中, a a a和 b b b的最大公约元被定义为理想 A a + A b Aa+Ab Aa+Ab的生成元。
改成 n n n元一次不定方程,裴蜀定理依然成立。
Problem List
★☆☆☆☆☆☆☆☆☆ bzoj1441
更相减损术
更相减损一开始是为了约分被设计出来的。原理当然是求 g c d gcd gcd啦,然后同除。
分为两步,第一步是同约去 2 n 2^n 2n,第二步才是更相减损。就是大数减小数,直到得到 0 0 0。
然后减出 0 0 0的那个数乘上 2 n 2^n 2n就是 g c d gcd gcd。
具体的证明之后再说。下面看一个更相减损约分的例子。
e g . eg. eg. 化简 799 1081 \dfrac{799}{1081} 1081799。
① 1081 − 799 = 282 1081-799=282 1081−799=282
② 799 − 282 = 517 799-282=517 799−282=517
③ 517 − 282 = 235 517-282=235 517−282=235
④ 282 − 235 = 47 282-235=47 282−235=47
⑤ 235 − 47 = 188 235-47=188 235−47=188
⑥ 188 − 47 = 141 188-47=141 188−47=141
⑦ 141 − 47 = 94 141-47=94 141−47=94
⑧ 94 − 47 = 47 94-47=47 94−47=47
⑩ 799 1081 = 799 47 1081 47 = 17 23 \dfrac{799}{1081}=\dfrac{\frac{799}{47}}{\frac{1081}{47}}=\dfrac{17}{23} 1081799=47108147799=2317
很显然中间有好几步可以合并,也不难实现。
辗转相除法(欧几里德算法)
更相减损明显有一些步骤可以合并。
那么合并完长什么样?
1081 % 799 = 282 1081\%799=282 1081%799=282
799 % 282 = 235 799\%282=235 799%282=235
282 % 235 = 47 282\%235=47 282%235=47
235 % 47 = 0 235\%47=0 235%47=0
至少看起来好像变快了?——这就是“辗转相除法”。
其复杂度稳定在 O ( log { max ( a , b ) } ) O(\log\{\max(a,b)\}) O(log{ max(a,b)}),而更相减损的复杂度可能退化到 O ( max { a , b } ) O(\max\{a,b\}) O(max{ a,b})
对比一下暴力枚举的复杂度 O ( min { a , b } ) O(\min\{a,b\}) O(min{ a,b}),更相减损一旦退化那就爆炸了。
也可以看出更相减损实际上是辗转相除的一个特例。
证明辗转相除,只需要证明 ( a , b ) = ( a − n b , b ) (a,b)=(a-nb,b) (a,b)=(a−nb,b)
设 μ = ( a , b ) \mu=(a,b) μ=(a,b)。
那么 a = μ A , b = μ B a=\mu A,b=\mu B a=μA,b=μB, ( A , B ) = 1 (A,B)=1 (A,B)=1。
由裴蜀定理的重要推论,存在 x , y ∈ Z x,y\in\Z x,y∈Z使 A x + B y = 1 Ax+By=1 Ax+By=1
则 a − n b = μ ( A − n B ) a-nb=\mu(A-nB) a−nb=μ(A−nB);且 x ( A − n B ) + ( n x + y ) B = A x + B y = 1 x(A-nB)+(nx+y)B=Ax+By=1 x(A−nB)+(nx+y)B=Ax+By=1,
即 ( A − n B , B ) = 1 (A-nB,B)=1 (A−nB,B)=1。又因为 ∀ c , d , k ∈ N ∗ \mathbf\forall c,d,k\in\N^* ∀c,d,k∈N∗有 ( c , d ) = 1 ⇒ ( k c , k d ) = k (c,d)=1\Rightarrow (kc,kd)=k (c,d)=1⇒(kc,kd)=k:
有 ( a − n b , b ) = μ = ( a , b ) (a-nb,b)=\mu=(a,b) (a−nb,b)=μ=(a,b)。
证明也可以这么描述:
∀ a , b ∈ Z \mathbf\forall a,b\in\Z ∀a,b∈Z, ∃ d ∣ ( a , b ) , k ∈ Z \mathbf\exists d|(a,b),k\in\Z ∃d∣(a,b),k∈Z使 a = k b + d a=kb+d a=kb+d即 d = a − k b d=a-kb d=a−kb。
并且 d ∣ b d|b d∣b则 ∀ x ∈ Z \mathbf\forall x\in\Z ∀x∈Z有 d ∣ x b d|xb d∣xb。又因为 d ∣ a d|a d∣a,就有:
∀ x ∈ Z \mathbf\forall x\in\Z ∀x∈Z有 d ∣ ( x b + a ) d|(xb+a) d∣(xb+a),则 x = − k x=-k x=−k时有 d ∣ ( a m o d b ) d|(a\mod b) d∣(amodb);又 d ∣ a d|a d∣a,
那么: a a a和 b b b的公因子集合与 b b b和 a m o d b a\mod b amodb的公因子集合相同。
辗转相除法写起代码来也短,如:T gcd(T a, T b){return !b?a:gcd(b,a%b);}
这个函数揭示了一个约定俗成的概念,即任何非零整数和零的最大公约数为它本身。
不过辗转相除有一个缺点,就是它取模多。取模还是比较慢的,尤其是对int64
的取模。
我们再思考一下辗转相除不取模能怎么做?
Stein算法
1081 − 799 = 282 1081-799=282 1081−799=282,这里留下了一个 282 282 282。能不能给它也 ÷ 2 n \div 2^n ÷2n然后更相减损啊?
也就是说,一奇一偶的时候能不能化偶为奇?
结论: ( k , b ) = 1 (k,b)=1 (k,b)=1, ( k a , b ) = ( a , b ) (ka,b)=(a,b) (ka,b)=(a,b)。特殊地, k = 2 k=2 k=2时……
1081 − 799 = 282 1081-799=282 1081−799=282, 282 ÷ 2 = 141 282\div2=141 282÷2=141
799 − 141 = 658 799-141=658 799−141=658, 658 ÷ 2 = 329 658\div2=329 658÷2=329
329 − 141 = 188 329-141=188 329−141=188, 188 ÷ 2 = 94 188\div2=94 188÷2=94, 94 ÷ 2 = 47 94\div2=47 94÷2=47
141 − 47 = 94 141-47=94 141−47=94, 94 ÷ 2 = 47 94\div2=47 94÷2=47
47 − 47 = 0 47-47=0 47−47=0
虽然好像步数更多了,但是 > > 1 >>1 >>1很快的。
Stein算法就是把上面 ( a , b ) ⇒ ( b , a − b 2 n ) (a,b)\Rightarrow(b,\dfrac{a-b}{2^n}) (a,b)⇒(b,2na−b)改为 ⇒ ( a + b 2 , a − b 2 ) \Rightarrow(\dfrac{a+b}{2},\dfrac{a-b}{2}) ⇒(2a+b,2a−b)。
关于此,我确信已发现了一种美妙的证法,可惜这里空白的地方太小,写不下。
( a , b ) ⇒ ( a + b 2 , a − b 2 ) (a,b)\Rightarrow(\dfrac{a+b}{2},\dfrac{a-b}{2}) (a,b)⇒(2a+b,2a−b)的证明,大致可以这么做:
设 m = a + b 2 m=\dfrac{a+b}{2} m=2a+b, n = a − b 2 n=\dfrac{a-b}{2} n=2a−b,先证 ( a , b ) ∣ ( m , n ) (a,b)|(m,n) (a,b)∣(m,n)再证 ( m , n ) ∣ ( a , b ) (m,n)|(a,b) (m,n)∣(a,b)。【参考】
如果两个数都是奇数就同除以 2 2 2。最后的 g c d gcd gcd要乘上前面共同除掉的 2 2 2。
复杂度就是 O ( log ( max { a , b } ) ) O(\log(\max\{a,b\})) O(log(max{ a,b})),要小心 a = b a=b a=b退化。
最常见的应用是在高精度gcd上。高精大数要取模是很麻烦的,相减和移位要好得多。
平时gcd还是用辗转相除,代码短而且好记。
最小非负剩余
听起来是不是很高端?
它也叫做不完全商。简单说就是取模得到的结果。
剩余类
与 a ∈ Z a\in\Z a∈Z对模 n ∈ N ∗ n\in\N^* n∈N∗同余的整数构成集合 [ a ] [a] [a], a a a称为模 n n n剩余类 [ a ] [a] [a]的一个代表元。
可以定义剩余类间的加法,则以 0 0 0所在的类为单位元,全体剩余类关于加法构成一个交换群。
显然,一定可以定义剩余类之间的乘法,而不一定能够定义剩余类之间的除法。
完全剩余系(完系)
在模n的每个剩余类中各取一个元素,这n个数构成模n的一个完全剩余系。
就是说:
一个模n完全剩余系是一个整数的集合,使得任意整数恰好和其中的一个元素模n同余。
引理 n个模n不同余的整数的集合构成模n的一个完系。
既约剩余系(简化剩余系/缩系/简系)
从与模 m m m互素的每个剩余类中各取一个数作为代表元,组成模 m m m的一个简化剩余系。
常用性质
Ⅰ 对于 n n n个整数,它们构成模 n n n的完系,等价于它们关于模 n n n两两不同余。
Ⅱ 若 a i a_i ai( 1 ≤ i ≤ n 1\le i\le n 1≤i≤n)构成模 n n n的完系,则对 k , m ∈ Z k,m\in\Z k,m∈Z、 ( m , n ) = 1 (m,n)=1 (m,n)=1,
k + m a i k+ma_i k+mai( 1 ≤ i ≤ n 1\le i\le n 1≤i≤n)也构成模n的完系。
Ⅲ 若 a i a_i ai( 1 ≤ i ≤ n 1\le i\le n 1≤i≤n)构成模 n n n的完系,则 ∑ i = 1 n a i = n ( n + 1 ) 2 \displaystyle\sum\limits_{i=1}^na_i=\dfrac{n(n+1)}{2} i=1∑nai=2n(n+1);
并且 ∑ i = 1 n a i = n 2 ( m o d n ) \displaystyle\sum\limits_{i=1}^na_i=\dfrac{n}{2}\pmod{n} i=1∑nai=2n(modn)或 ∑ i = 1 n a i = 0 ( m o d n ) \displaystyle\sum\limits_{i=1}^na_i=0\pmod{n} i=1∑nai=0(modn)。
Ⅳ 若 m = p α m=p^\alpha m=pα(素数 p ≥ 2 p\ge2 p≥2)存在原根 g g g,则模 m m m的简化剩余系为: g 0 , g 1 , ⋯ , g ϕ ( m ) − 1 g^0,g^1,\cdots,g^{\phi(m)-1} g0,g1,⋯,gϕ(m)−1。
取模:将 a a a对模 p p p取模得到 a ( m o d p ) a\pmod{p} a(modp)。
满足: a ( m o d p ) a\pmod{p} a(modp)是最小的 c ∈ N c\in\N c∈N使 ∃ k ∈ Z , k p + c = a \mathbf\exists k\in\Z,kp+c=a ∃k∈Z,kp+c=a
同余: a a a和 b b b对于模 p p p同余,记作 a ≡ b ( m o d p ) a\equiv b\pmod{p} a≡b(modp)。
满足: a ( m o d p ) = b ( m o d p ) a\pmod{p}=b\pmod{p} a(modp)=b(modp)。
性质:
同余满足自反性、对称性、传递性,因此同余是一种等价关系;
若 a ≡ c ( m o d p ) , b ≡ d ( m o d p ) a\equiv c\pmod{p},b\equiv d\pmod{p} a≡c(modp),b≡d(modp),则 a ± b ≡ c ± d ( m o d p ) , a b ≡ c d ( m o d p ) a\pm b\equiv c\pm d\pmod{p},ab\equiv cd\pmod{p} a±b≡c±d(modp),ab≡cd(modp);
若 a c ≡ b c ( m o d p ) , c ≠ 0 ac\equiv bc\pmod{p},c\ne0 ac≡bc(modp),c=0,则 a ≡ b ( m o d m ( c , m ) ) a\equiv b\pmod{\dfrac{m}{(c,m)}} a≡b(mod(c,m)m)
其中 ( c , m ) (c,m) (c,m)表示 c c c和 m m m的最大公因数(gcd)。
若 a ≡ b ( m o d p ) a\equiv b\pmod{p} a≡b(modp),则 a n ≡ b n ( m o d p ) a^n\equiv b^n\pmod{p} an≡bn(modp);
若 ∀ i ∈ [ 1 , N ∗ ] ∩ Z \mathbf\forall i\in[1,\N^*]\cap\Z ∀i∈[1,N∗]∩Z有 a ≡ b ( m o d p i ) a\equiv b\pmod{p_i} a≡b(modpi),记所有 p i p_i pi的最小公倍数(lcm) P P P, a ≡ b ( m o d P ) a\equiv b\pmod{P} a≡b(modP)
\;
费马小定理
对于质数 p p p,一定有 a p ≡ a ( m o d p ) a^p\equiv a\pmod{p} ap≡a(modp)。
当 p ∣ a p|a p∣a不成立时,我们有 a p − 1 ≡ 1 ( m o d p ) a^{p-1}\equiv1\pmod{p} ap−1≡1(modp)。
欧拉定理
对于 ∀ a , p ∈ N ∗ \mathbf\forall a,p\in\N^* ∀a,p∈N∗满足 ( a , p ) = 1 (a,p)=1 (a,p)=1,有 a ϕ ( p ) ≡ 1 ( m o d p ) a^{\phi(p)}\equiv 1\pmod{p} aϕ(p)≡1(modp)。
显然费马小定理是欧拉定理的一个特殊情况,费马小定理可以表述为:
对于 ∀ a , p ∈ N ∗ \mathbf\forall a,p\in\N^* ∀a,p∈N∗满足 ( a , p ) = 1 , ϕ ( p ) = p − 1 (a,p)=1,\phi(p)=p-1 (a,p)=1,ϕ(p)=p−1,有 a p − 1 ≡ 1 ( m o d p ) a^{p-1}\equiv 1\pmod{p} ap−1≡1(modp)。
其中 ϕ ( p ) = p − 1 \phi(p)=p-1 ϕ(p)=p−1等价于 p p p为质数。
ϕ \phi ϕ是欧拉函数, ϕ ( p ) \phi(p) ϕ(p)可以说是指 p p p的既约剩余系个数。
https://blog.csdn.net/bigbigship/article/details/45624681
通式
x ≠ 0 x\ne0 x=0有 ϕ ( x ) = x ∏ i = 1 ω ( x ) ( 1 − 1 p i ) \displaystyle{\mathcal{\phi(x)=x\prod\limits_{i=1}^{\omega(x)}(1-\frac{1}{p_i})}} ϕ(x)=xi=1∏ω(x)(1−pi1),其中 ϕ ( x ) \phi(x) ϕ(x)为欧拉函数,表示 ≤ x \le x ≤x与 x x x互质的数的个数。
注意:是小于等于而不是小于。这么记:φ(1)=1。
为什么通式是这个?
可以认为:每乘上一个 ( 1 − 1 p i ) (1-\frac{1}{p_i}) (1−pi1)就筛掉了 x x x的一个质因子在 [ 1 , x ] [1,x] [1,x]内的倍数。
之所以要用在这里用 1 1 1减然后去乘,是因为要不重不漏地计数。
通式也可以用下面的性质Ⅱ和性质Ⅲ证明。
由通式可以证明性质Ⅲ(欧拉函数的积性)。
也可以用剩余那套来证积性。【参考】
性质
Ⅰ 对 a , b , c ∈ Z a,b,c\in\Z a,b,c∈Z满足 b ∣ a b|a b∣a,有: a b m o d c = a m o d b c b m o d c \dfrac{a}{b}\mod c=\dfrac{a\mod bc}{b}\mod c bamodc=bamodbcmodc
并且若 ( b , c ) = 1 (b,c)=1 (b,c)=1,有: a b m o d c = a b ϕ ( c ) − 1 m o d c \dfrac{a}{b}\mod c=ab^{\phi(c)-1}\mod c bamodc=abϕ(c)−1modc
Ⅱ p p p为质数。 ϕ ( p k ) = ( p − 1 ) ⋅ p k − 1 \phi(p^k)=(p-1)\cdot p^{k-1} ϕ(pk)=(p−1)⋅pk−1:因为除了 p p p的倍数外所有小于 n n n的数都和 n n n互质。
Ⅲ 欧拉函数是积性函数。这就是说: ϕ ( m n ) = ϕ ( m ) ϕ ( n ) \phi(mn)=\phi(m)\phi(n) ϕ(mn)=ϕ(m)ϕ(n)当且仅当 ( m , n ) = 1 (m,n)=1 (m,n)=1。
Ⅳ n n n为奇数, ϕ ( 2 n ) = ϕ ( n ) \phi(2n)=\phi(n) ϕ(2n)=ϕ(n)
Ⅴ n n n为质数, ϕ ( n ) = n − 1 \phi(n)=n-1 ϕ(n)=n−1
Ⅵ 欧拉定理:当 ( a , m ) = 1 (a,m)=1 (a,m)=1时 a ϕ ( m ) ≡ 1 ( m o d m ) a^{\phi(m)}\equiv1\pmod{m} aϕ(m)≡1(modm)
Ⅶ 欧拉降幂(扩展欧拉定理): a c ≡ { a c m o d ϕ ( m ) , ( a , m ) = 1 a c , ( a , m ) ≠ 1 , c < ϕ ( m ) a [ c m o d ϕ ( m ) ] + ϕ ( m ) , ( a , m ) ≠ 1 , c ≥ ϕ ( m ) a^c\equiv\begin{cases}a^{c\mod \phi(m)},\;\qquad\qquad\qquad\;\;\;\qquad(a,m)=1\\a^c,\qquad\qquad\qquad\;\,\qquad(a,m)\ne1,c<\phi(m)\\a^{[c\mod \phi(m)]+\phi(m)},\;\qquad(a,m)\ne1,c\ge\phi(m)\end{cases} ac≡⎩⎪⎨⎪⎧acmodϕ(m),(a,m)=1ac,(a,m)=1,c<ϕ(m)a[cmodϕ(m)]+ϕ(m),(a,m)=1,c≥ϕ(m)
Ⅷ n > 2 n>2 n>2, 2 ∣ ϕ ( n ) 2|\phi(n) 2∣ϕ(n)。
Ⅸ ≤ n \le n ≤n的数里与 n n n互质的数的和: ϕ ( n ) ⋅ n 2 \cfrac{\phi(n)\cdot n}{2} 2ϕ(n)⋅n
Ⅹ n = ∑ d ∣ n ϕ ( d ) = ∑ d ∣ n ∑ k ∣ d μ ( k ) ⋅ d k n=\sum\limits_{d|n}\phi(d)=\sum\limits_{d|n}\sum\limits_{k|d}\frac{\mu(k)\cdot d}{k} n=d∣n∑ϕ(d)=d∣n∑k∣d∑kμ(k)⋅dn = ∑ d ∣ n ϕ ( d ) n=\sum\limits_{d|n}\phi(d) n=d∣n∑ϕ(d)
证明(大概地):
首先,我们把 [ 1 , n ] [1,n] [1,n]的整数按照与 n n n的最大公约数 d d d分类。显然 d d d取到 n n n的所有因数。
记与 n n n的最大公约数为 d d d的一类数的集合为 S d S_d Sd。可知 ∑ d ∣ n ∣ S d ∣ = n \sum\limits_{d|n}|S_d|=n d∣n∑∣Sd∣=n。
∵ ∀ m ∈ [ 1 , n ] ∩ N ∗ \because \mathbf\forall m\in[1,n]\cap\N^* ∵∀m∈[1,n]∩N∗, m ∈ S d m\in S_d m∈Sd当且仅当 ( n , m ) = d (n,m)=d (n,m)=d即 ( n d , m d ) = 1 (\frac{n}{d},\frac{m}{d})=1 (dn,dm)=1。
又 1 ≤ m ≤ n 1\le m\le n 1≤m≤n,只考虑 d ∣ m d|m d∣m的 m m m,那么 m d \frac{m}{d} dm恰好取到所有 ≥ 1 \ge1 ≥1且 ≤ n d \le\frac{n}{d} ≤dn的数。
∴ m ∈ S d \therefore m\in S_d ∴m∈Sd的 m m m应该有 ϕ ( n d ) \phi(\frac{n}{d}) ϕ(dn)个。
∴ n = ∑ d ∣ n ϕ ( n d ) = ∑ d ∣ n ϕ ( d ) \therefore n=\sum\limits_{d|n}\phi(\frac{n}{d})=\sum\limits_{d|n}\phi(d) ∴n=d∣n∑ϕ(dn)=d∣n∑ϕ(d)。
也可以用Dirchlet积,设t=φ*id,把t(n)唯一分解,然后证t(n)=n。
欧拉定理&扩展欧拉定理的证明
扩展欧拉定理中第一个是欧拉降幂,要求互质;第二个是广义欧拉降幂,不要求互质。
Problem List
★☆☆☆☆☆☆☆☆☆ bzoj3884 欧拉降幂+复杂度分析
★★☆☆☆☆☆☆☆☆ hdu4549 欧拉降幂+矩阵加速
a x ≡ 1 ( m o d n ) ax\equiv1\pmod{n} ax≡1(modn)则 x x x称作 a a a(在整数模 n n n乘法群内)的逆元,记作 a − 1 a^{-1} a−1。
当 ( a , n ) > 1 (a,n)>1 (a,n)>1时,逆元不存在。
对于 n n n为质数的情况,我们通常使用费马小定理 a n − 1 ≡ 1 ( m o d n ) a^{n-1}\equiv 1\pmod{n} an−1≡1(modn)
否则使用扩展欧几里德算法求解。
https://www.lydsy.com/JudgeOnline/problem.php?id=1965
BSGS
exBSGS
埃拉托斯特尼筛法(埃氏筛/埃氏筛法)
从 2 2 2开始遍历,对于每个质数,把它在数据范围内的倍数打上合数标记。 O ( n log log n ) O(n\log\log n) O(nloglogn)。
复杂度证明:
在埃氏筛法中,对每个质数 p p p,要遍历 n p \frac{n}{p} pn个数。
所以总共要遍历 ∑ p n p = n ∑ p 1 p \sum\limits_{p}\frac{n}{p}=n\sum\limits_{p}\frac{1}{p} p∑pn=np∑p1个。
设 f ( n ) f(n) f(n)表示 [ 1 , n ] [1,n] [1,n]内所有素数的倒数和。 n → + ∞ n\to+\infty n→+∞时, f ( n ) f(n) f(n)与 ln ln n \ln{\ln{n}} lnlnn为等价无穷大量。【参考】
for(int i=2;i<=n;++i) if(!vis[i]) for(int j=i+i;j<=n;j+=i) vis[j]=1;
线性筛(欧拉筛/欧拉筛法)
埃氏筛法常数比线性筛小不少,所以线性筛一般还是用来筛积性函数。
当规模 > 1 0 6 >10^6 >106的时候,筛素数可以考虑线性筛。
线性筛保证每个数只被检测一次,所以复杂度 O ( n ) O(n) O(n)。
Problem List
★★☆☆☆☆☆☆☆☆ 计蒜客30999
二次探测定理
时间复杂度 O ( p 1 2 log 2 ( n ) ) O(p^{\frac{1}{2}}\log^2(n)) O(p21log2(n)),期望 O ( n 1 4 ) O(n^{\frac{1}{4}}) O(n41)。【证明】
简单地讲,我们有三个参数: N , k p u b l i c , k p r i v a t e N,k_{public},k_{private} N,kpublic,kprivate。
其中:
Ⅰ 大整数 N N N是两个大质数 p , q p,q p,q的乘积;于是 ϕ ( N ) = ϕ ( p ) ⋅ ϕ ( q ) = ( p − 1 ) ( q − 1 ) \phi(N)=\phi(p)\cdot\phi(q)=(p-1)(q-1) ϕ(N)=ϕ(p)⋅ϕ(q)=(p−1)(q−1)。
Ⅱ k p u b l i c k_{public} kpublic在满足 g c d ( k p u b l i c , ϕ ( N ) ) = 1 gcd\large(\small k_{public},\small\phi(N)\large)\normalsize=1 gcd(kpublic,ϕ(N))=1的前提下可以任取(当然 1 < k p u b l i c < ϕ ( N ) 1
Ⅲ k p r i v a t e k_{private} kprivate的值只需要解 k p u b l i c ⋅ k p r i v a t e ≡ 1 ( m o d ϕ ( N ) ) k_{public}\cdot k_{private}\equiv1\pmod{\phi(N)} kpublic⋅kprivate≡1(modϕ(N))得。这步用exgcd。
那么公钥 ( N , k p u b l i c ) (N,k_{public}) (N,kpublic),私钥 ( N , k p r i v a t e ) (N,k_{private}) (N,kprivate)。
(上面两个括号指的是数对一类的意思,反正不是说gcd)
加密利用公钥(压缩信息): y ≡ x k p u b l i c ( m o d N ) y\equiv x^{k_{public}}\pmod{N} y≡xkpublic(modN)
解密利用私钥(还原信息): x ≡ y k p r i v a t e ( m o d N ) x\equiv y^{k_{private}}\pmod{N} x≡ykprivate(modN)【证明】
实际上还要带上随机因素做padding,一般遵循PCKS1标准。
不然说不定就可以直接根据明文和密文搞对应了。【参考】
假设现在手里有公钥 ( N , k p u b l c ) (N,k_{publc}) (N,kpublc)和密文 y y y(并且知道加密是RSA),要破解(求明文 x x x):
首先因为被模了,所以当然不要想着可以用第一条式子还原。
假设我们现在没有其他办法,只能算 k p r i v a t e k_{private} kprivate来求明文。
但是!要求 k p r i v a t e k_{private} kprivate,只能通过求 ϕ ( N ) \phi(N) ϕ(N);这是什么概念?
线性筛就不要期望了,只能用 ϕ ( N ) = N ⋅ ∏ i = 1 ω ( N ) p i − 1 p i \displaystyle{\phi(N)=N\cdot\large\prod\limits_{\tiny i=1}^{\tiny\omega(N)}\small\frac{p_i-1}{p_i}} ϕ(N)=N⋅i=1∏ω(N)pipi−1来求。
所以得因数分解。通常认为对RSA类大数的因数分解一般用GNFS最快,不过也很慢。
在量子计算机上面有一种超快的算法可以分解。不过暂时还不用担心这个。
首先,这个“筛法”并不是指素数筛,数域筛法(NFS)也不是欧拉筛法(
Pollard-ρ的效率跟因数大小有不小的关系;
而GNFS的运行时间仅仅依赖于要分解的整数的长度。
数域筛法(NFS)复杂度: O ( n c log ( n ) log 2 [ log ( n ) ] 3 ) O\frak{\left(n^{c\sqrt{\log(n)}\sqrt[3]{\log^2[\log(n)]}}\right)} O(nclog(n)3log2[log(n)])
对于GNFS, c ≈ 64 9 3 c\approx\sqrt[3]{\frac{64}{9}} c≈3964。
算法流程
多项式的选择
牛顿迭代法
牛顿迭代法是二阶收敛的。【参考】【证明】【几何解释】
0x5f3759df
牛顿迭代法依赖于合适的初值。这个数就很合适。【参考1】【参考2】
lim n → + ∞ n ! 2 π n ( n e ) n = 1 \mathcal{\lim\limits_{n\to+\infty}\dfrac{n!}{\sqrt{2\pi n}(\frac{n}{e})^n}}=1 n→+∞lim2πn(en)nn!=1。
重要推论: n ! ≈ 2 π n ( n e ) n \mathcal{n!\approx\sqrt{2\pi n}(\frac{n}{e})^n} n!≈2πn(en)n
n ≤ 10 n\le10 n≤10的时候斯特林公式不是很准确,反正可以自己算的(
不过基本上不可能遇到真的需要快速估算阶乘,一般遇到的都是取对数,所以问题应该不大?
Problem List
★☆☆☆☆☆☆☆☆☆ nowcoder75A
虚数单位: i i i,也记作 i ^ \mathrm{\hat{i}} i^
性质: i 2 = − 1 i^{_2}=-1 i2=−1
复数:形如 z = a + b i z=a+bi z=a+bi( a , b ∈ R a,b\in \R a,b∈R),其中 a a a是实部, b i bi bi是虚部。
z z z在 b i = 0 bi=0 bi=0时称为实数, a = 0 a=0 a=0时称为纯虚数
容易得到:
设复数 u = a + b i u=a+bi u=a+bi, v = c + d i v=c+di v=c+di( a , b , c , d ∈ R a,b,c,d\in\R a,b,c,d∈R)
u + v = ( a + c ) + ( b + d ) i u+v=(a+c)+(b+d)i u+v=(a+c)+(b+d)i
u − v = ( a − c ) + ( b − d ) i u-v=(a-c)+(b-d)i u−v=(a−c)+(b−d)i
u × v = ( a c − b d ) + ( a d + b c ) i u\times v=(ac-bd)+(ad+bc)i u×v=(ac−bd)+(ad+bc)i
共轭复数: z ˉ = a − b i \bar z=a-bi zˉ=a−bi是 z = a + b i z=a+bi z=a+bi的共轭复数( a , b ∈ R a,b\in \R a,b∈R)
∣ z ∣ = ∣ z ˉ ∣ |z|=|\bar z| ∣z∣=∣zˉ∣
( a + b i ) ( a − b i ) = a 2 + b 2 (a+bi)(a-bi)=a^2+b^2 (a+bi)(a−bi)=a2+b2( a , b ∈ R a,b\in \R a,b∈R)
复数集 C \mathbb C C是无序集。
复数的模:对于 z = a + b i z=a+bi z=a+bi( z ∈ C z\in\mathbb C z∈C),它的模 ∣ z ∣ = a 2 + b 2 |z|=\sqrt{a^2+b^2} ∣z∣=a2+b2
在复变函数中,自变量 z z z可以写作 z = ∣ z ∣ ⋅ ( c o s θ + i s i n θ ) = ∣ z ∣ ⋅ e i θ z=|z|\cdot(cos\theta+isin\theta)=|z|\cdot e^{i\theta} z=∣z∣⋅(cosθ+isinθ)=∣z∣⋅eiθ
其中 θ \theta θ是 z z z的幅角 Arg ( z ) \operatorname{Arg}(z) Arg(z)。
Arg ( z ) ∈ [ − π , π ] \operatorname{Arg}(z)\in[-\pi,\pi] Arg(z)∈[−π,π]称为幅角主值 arg ( z ) \arg(z) arg(z)。
z ∈ C z\in\mathbb{C} z∈C的幅角有无限多个值,这些值两两相差 2 π k 2\pi k 2πk( k ∈ Z k\in\Z k∈Z)。
m行n列矩阵例如:三行二列矩阵 A = [ a 11 a 12 a 21 a 22 a 31 a 32 ] = ( a i j ) m × n = ( a i j ) ∈ C m × n \mathbf A=\left[\begin{matrix}a_{_{11}}\quad a_{_{12}}\\a_{_{21}}\quad a_{_{22}}\\a_{_{31}}\quad a_{_{32}}\end{matrix}\right]=(a_{ij})_{m\times n}=(a_{ij})\in\mathbb C^{m\times n} A=⎣⎡a11a12a21a22a31a32⎦⎤=(aij)m×n=(aij)∈Cm×n
其 i i i行 j j j列的元素一般记作 a i j a_{ij} aij(如果是 B \mathbf B B就经常记作 b i j b_{ij} bij这样的),这里我可能记作 A i j \mathbf A_{ij} Aij
特别地,当 m = n m=n m=n时,n行n列矩阵也称为n阶方阵。
假如矩阵里面的元素都是实数,那么这个矩阵也称为实矩阵;
如果(可能)有虚部非零的复数,就称为复矩阵。
单位矩阵:主对角线(左上-右下对角线)上元素是1,其他的都是0。记作 E \mathbf E E或者 I \mathbf I I。
对角矩阵:不在主对角线上的元素都是 0 0 0。
通常记作 d i a g ( diag( diag(主对角线上的元素,从左上到右下 ) ) )
增广矩阵&系数矩阵
感性理解一下。举个例子:
对于二元一次方程组 { a 1 x + b 1 y = c 1 a 2 x + b 2 y = c 2 \begin{cases}a_{_1}x+b_{_1}y=c_{_1}\\a_{_2}x+b_{_2}y=c_{_2}\end{cases} { a1x+b1y=c1a2x+b2y=c2
它的增广矩阵是 [ a 1 b 1 c 1 a 2 b 2 c 2 ] \left[\begin{matrix}a_{_1}\quad b_{_1}\quad c_{_1}\\a_{_2}\quad b_{_2}\quad c_{_2}\end{matrix}\right] [a1b1c1a2b2c2],系数矩阵是 [ a 1 b 1 a 2 b 2 ] \left[\begin{matrix}a_{_1}\quad b_{_1}\\a_{_2}\quad b_{_2}\end{matrix}\right] [a1b1a2b2]
相邻矩阵
图的相邻矩阵也叫做邻接矩阵。
对矩阵 M = [ a b c d e f g h i j k l ] \mathbf M=\left[\begin{matrix}a\quad b\quad c\\d\quad e\quad f\\g\quad h\quad i\\j\quad k\quad l\end{matrix}\right] M=⎣⎢⎢⎡abcdefghijkl⎦⎥⎥⎤
设其子块:
A = [ a b d e g h ] \mathbf A=\left[\begin{matrix}a\quad b\\d\quad e\\g\quad h\end{matrix}\right] A=⎣⎡abdegh⎦⎤,
B = [ j k ] \mathbf B=\left[\begin{matrix}j\quad k\end{matrix}\right] B=[jk],
C = [ e f i ] \mathbf C=\left[\begin{matrix}e\\f\\i\end{matrix}\right] C=⎣⎡efi⎦⎤,
D = [ l ] \mathbf D=[l] D=[l]那么
M = [ a b c d e f g h i j k l ] = ( x i j ) m × n \mathbf M=\left[\begin{matrix}a\quad b\quad c\\d\quad e\quad f\\g\quad h\quad i\\j\quad k\quad l\end{matrix}\right]=(x_{ij})_{m\times n} M=⎣⎢⎢⎡abcdefghijkl⎦⎥⎥⎤=(xij)m×n
并且
M = [ A C B D ] = ( M i j ) r × s \mathbf M=\left[\begin{matrix}\mathbf A\quad\mathbf C\\\mathbf B\quad\mathbf D\end{matrix}\right]=(\mathbf M_{ij})_{r\times s} M=[ACBD]=(Mij)r×s称
[ A C B D ] = ( M i j ) r × s \left[\begin{matrix}\mathbf A\quad\mathbf C\\\mathbf B\quad\mathbf D\end{matrix}\right]=(\mathbf M_{ij})_{r\times s} [ACBD]=(Mij)r×s
为分块矩阵。
上面是一个简单的例子。
分块矩阵的加法
设 A = ( a i j ) m × n , B = ( b i j ) m × n \mathbf A=(a_{ij})_{m\times n},\mathbf B=(b_{ij})_{m\times n} A=(aij)m×n,B=(bij)m×n
用同样的方法对 A , B \mathbf A,\mathbf B A,B分块(即: A i j \mathbf A_{ij} Aij和 B i j \mathbf B_{ij} Bij为同型矩阵)
那么 A ± B = ( A i j ± B i j ) r × s \mathbf A\pm\mathbf B=(\mathbf A_{ij}\pm\mathbf B_{ij})_{r\times s} A±B=(Aij±Bij)r×s
以平面直角坐标系为例,取分别与x轴、y轴方向相同的基/基向量/单位向量i,j
对于向量 a → = x i + y j \overrightarrow{a}=x\mathbf{i}+y\mathbf{j} a=xi+yj,它的坐标为 ( x , y ) (x,y) (x,y)。记作 a = [ x y ] a=\left[\begin{matrix}x\\y\end{matrix}\right] a=[xy]。
加法
两个同型矩阵(都为m行n列)之间可以进行加法
举个例子, [ a b c ] + [ d e f ] = [ a + d b + e c + f ] [a\quad b\quad c]+[d\quad e\quad f]=[a+d\quad b+e\quad c+f] [abc]+[def]=[a+db+ec+f]
满足交换律 A + B = B + A \mathbf A+\mathbf B=\mathbf B+\mathbf A A+B=B+A和结合律 ( A + B ) + C = A + ( B + C ) (\mathbf A+\mathbf B)+\mathbf C=\mathbf A+(\mathbf B+\mathbf C) (A+B)+C=A+(B+C)
数乘
举个例子, 2 [ a b c ] = [ 2 a 2 b 2 c ] 2[a\quad b\quad c]=[2a\quad 2b\quad 2c] 2[abc]=[2a2b2c]
满足以下运算律:
λ ( μ A ) = μ ( λ A ) = λ μ A \lambda(\mu\mathbf A)=\mu(\lambda\mathbf A)=\lambda\mu\mathbf A λ(μA)=μ(λA)=λμA
( λ + μ ) A = λ A + μ A (\lambda+\mu)\mathbf A=\lambda\mathbf A+\mu\mathbf A (λ+μ)A=λA+μA
λ ( A + B ) = λ A + λ B \lambda(\mathbf A+\mathbf B)=\lambda\mathbf A+\lambda\mathbf B λ(A+B)=λA+λB
矩阵的加减法和数乘合称矩阵的线性运算
转置
矩阵 A \mathbf A A的转置(矩阵)记作 A T \mathbf A^{\mathrm T} AT。
举个例子, [ a , b ] T = [ a b ] [a,b]^{\mathrm T}=\left[\begin{matrix}a\\b\end{matrix}\right] [a,b]T=[ab]。
满足以下运算律:
( A T ) T = A (\mathbf A^{\mathrm T})^{\mathrm T}=\mathbf A (AT)T=A
( μ A ) T = μ A T (\mu\mathbf A)^{\mathrm T}=\mu\mathbf A^{\mathrm T} (μA)T=μAT
( A B ) T = A T B T (\mathbf A\mathbf B)^{\mathrm T}=\mathbf A^{\mathrm T}\mathbf B^{\mathrm T} (AB)T=ATBT
共轭
就是把每个元素共轭一下。(对于复数 a + b i a+bi a+bi,它的共轭复数为 a − b i a-bi a−bi)
矩阵 A \mathbf A A的共轭(矩阵)记作 A ‾ \overline{\mathbf A} A
举个例子:对于矩阵 A = [ a b + c i i ] \mathbf A=[a\quad b+ci\quad i] A=[ab+cii],它的共轭矩阵 A ‾ = [ a , b − c i , − i ] \overline{\mathbf A}=[a,b-ci,-i] A=[a,b−ci,−i]
共轭转置
就是共轭然后转置。
对于矩阵 A \mathbf A A,它的共轭转置(矩阵)记作 A T ‾ = ( A ‾ ) T = A H \overline{\mathbf A^{_{\mathrm T}}}=\left(\overline{\mathbf A}\right)^{_{\mathrm T}}=\mathbf A^\mathrm H AT=(A)T=AH
也有沙雕喜欢记成 A ∗ \mathbf A^* A∗,刚好跟伴随矩阵的记号冲突(
对称矩阵
n n n阶方阵 A \mathbf A A满足 A = A T \mathbf A=\mathbf A^\mathrm T A=AT那么它是对称的;
满足 A = − A T \mathbf A=-\mathbf A^\mathrm T A=−AT那么它是反对称的;
并且:一定有 A + A T \mathbf A+\mathbf A^\mathrm T A+AT对称, A − A T \mathbf A-\mathbf A^\mathrm T A−AT反对称。
又 A = 1 2 ( A + A T ) + 1 2 ( A − A T ) \mathbf A=\dfrac{1}{2}(\mathbf A+\mathbf A^\mathrm T)+\dfrac{1}{2}(\mathbf A-\mathbf A^\mathrm T) A=21(A+AT)+21(A−AT):
任何方阵可以表示为一个对称矩阵和一个反对称矩阵的和。
通常将 n n n阶对称矩阵的集合记为 S n S_n Sn。
自共轭矩阵
如果一个矩阵的共轭转置矩阵是它本身,那么称该矩阵为Hermitian矩阵(自共轭矩阵)。
矩阵直积(张量积/Kronecker积)
设 A = ( a i j ) m × n \mathbf A=(a_{ij})_{m\times n} A=(aij)m×n, B = ( b i j ) p × q \mathbf B=(b_{ij})_{p\times q} B=(bij)p×q
A \mathbf A A和 B \mathbf B B的直积:分块矩阵 A ⊗ B = ( a i j B ) m p × n q \mathbf A\otimes\mathbf B=(a_{ij}\mathbf B)_{mp\times nq} A⊗B=(aijB)mp×nq
显然 A ⊗ B \mathbf A\otimes\mathbf B A⊗B和 B ⊗ A \mathbf B\otimes\mathbf A B⊗A是同阶矩阵。
直积满足结合律,但不满足交换律。
可以简单把 A ⊗ B \mathbf A\otimes\mathbf B A⊗B理解成“将 A \mathbf A A作为 B \mathbf B B里面的 1 1 1”得到的“新的 B \mathbf B B”之类的(
当然这种说法不严谨,仅供直观感性理解
性质:
k ( A ⊗ B ) = ( k A ) ⊗ B = A ⊗ ( k B ) k(\mathbf A\otimes\mathbf B)=(k\mathbf A)\otimes\mathbf B=\mathbf A\otimes(k\mathbf B) k(A⊗B)=(kA)⊗B=A⊗(kB)
直积对矩阵加法、共轭、共轭转置满足分配律。
若 A ∈ C m × n , B ∈ C p × q , C ∈ C n × r , D ∈ C q × s \mathbf A\in\mathbb C^{m\times n},\mathbf B\in\mathbb C^{p\times q},\mathbf C\in\mathbb C^{n\times r},\mathbf D\in\mathbb C^{q\times s} A∈Cm×n,B∈Cp×q,C∈Cn×r,D∈Cq×s, ( A ⊗ B ) ( C ⊗ D ) = ( A C ) ⊗ ( B D ) (\mathbf A\otimes\mathbf B)(\mathbf C\otimes\mathbf D)=(\mathbf{AC})\otimes(\mathbf{BD}) (A⊗B)(C⊗D)=(AC)⊗(BD)
由上面那个,有一个非常显然的性质:(感觉就是废话)
若有 A ∈ C m × n , B ∈ C p × q \mathbf A\in\mathbb C^{m\times n},\mathbf B\in\mathbb C^{p\times q} A∈Cm×n,B∈Cp×q,单位矩阵 E n , E q , \mathbf E_n,\mathbf E_q, En,Eq,,那么 ( A ⊗ E n ) ( B ⊗ E q ) = A ⊗ B (\mathbf A\otimes\mathbf E_n)(\mathbf B\otimes\mathbf E_q)=\mathbf A\otimes\mathbf B (A⊗En)(B⊗Eq)=A⊗B
如果 A \mathbf A A, B \mathbf B B可逆, A ⊗ B \mathbf A\otimes\mathbf B A⊗B可逆。且 ( A ⊗ B ) − 1 = A − 1 ⊗ B − 1 (\mathbf A\otimes\mathbf B)^{-1}=\mathbf A^{-1}\otimes\mathbf B^{-1} (A⊗B)−1=A−1⊗B−1
对单位矩阵 E m \mathbf E_m Em, E n \mathbf E_n En, E m ⊗ E n = E n ⊗ E m = E m n \mathbf E_m\otimes\mathbf E_n=\mathbf E_n\otimes\mathbf E_m=\mathbf E_{mn} Em⊗En=En⊗Em=Emn
\;
向量外积
设向量 x = ( x 1 , x 2 , x 3 , ⋯ , x n ) T \bm x=(x_{_1},x_{_2},x_{_3},\cdots,x_{_n})^{\mathrm T} x=(x1,x2,x3,⋯,xn)T, y = ( y 1 , y 2 , y 3 , ⋯ , y n ) T \bm y=(y_{_1},y_{_2},y_{_3},\cdots,y_{_n})^{\mathrm T} y=(y1,y2,y3,⋯,yn)T
它们的外积为 x y T = x ⊗ y T \bm x\bm y^{\mathrm T}=\bm x\otimes\bm y^{\mathrm T} xyT=x⊗yT,满足 ( x y T ) i j = x i y j (\bm{xy}^\mathrm T)_{ij}=\bm x_i\bm y_j (xyT)ij=xiyj
矩阵乘法(矩乘)
A = ( a i j ) m × p \mathbf A=(a_{ij})_{m\times p} A=(aij)m×p, B = ( b i j ) p × n \mathbf B=(b_{ij})_{p\times n} B=(bij)p×n。
定义它们的乘积 C = A B \mathbf C=\mathbf{AB} C=AB满足 C i j = ∑ k = 1 p a i k b k j \mathbf C_{ij}=\displaystyle\sum\limits_{k=1}^p a_{_{ik}}b_{_{kj}} Cij=k=1∑paikbkj
矩阵乘法一般不满足交换律;满足交换律的话,那么相乘的两个矩阵是方阵。
Strassen矩阵乘法
对 O ( n 3 ) O(n^3) O(n3)的矩乘做了一些优化(减少了乘法次数),复杂度 O ( n log 7 ) O(n^{\log7}) O(nlog7)。
向量内积
可以看作是矩乘的特例。 1 × p 1\times p 1×p和 p × 1 p\times 1 p×1的矩阵相乘。
一般地(在矩阵元之间的乘法运算 ⋅ \cdot ⋅满足交换律的情况下),向量内积满足交换律。
设向量 x = ( x 1 , x 2 , x 3 , ⋯ , x n ) T \bm x=(x_{_1},x_{_2},x_{_3},\cdots,x_{_n})^{\mathrm T} x=(x1,x2,x3,⋯,xn)T, y = ( y 1 , y 2 , y 3 , ⋯ , y n ) T \bm y=(y_{_1},y_{_2},y_{_3},\cdots,y_{_n})^{\mathrm T} y=(y1,y2,y3,⋯,yn)T
它们的内积 x T y = ∑ i = 1 n x i y i \bm x^{_\mathrm T}\bm y=\displaystyle\sum\limits_{i=1}^nx_{_i}y_{_i} xTy=i=1∑nxiyi
内积也表示为 ≺ x , y ≻ \prec\bm x,\bm y\succ ≺x,y≻
哈达马积
同型矩阵 A \mathbf A A和 B \mathbf B B的哈达马积记作 A ∗ B \mathbf A*\mathbf B A∗B。
( A ∗ B ) i j = A i j B i j (\mathbf A*\mathbf B)_{ij}=\mathbf A_{ij}\mathbf B_{ij} (A∗B)ij=AijBij
逆矩阵
首先:只有方阵才可能有逆矩阵;
假如矩阵有逆矩阵,那么称矩阵可逆;否则称该矩阵奇异。
如果一个矩阵可逆,那么其逆矩阵唯一。
对于 M \mathbf M M,它的逆矩阵记作 M − 1 \mathbf M^{-1} M−1。
M M − 1 = M − 1 M = E \mathbf {MM}^{-1}=\mathbf{M}^{-1}\mathbf M=\mathbf E MM−1=M−1M=E,其中 E \mathbf E E表示单位矩阵。
一些性质:
A − 1 = C T det ( A ) \mathbf A^{-1}=\dfrac{\mathbf C^{\mathrm T}}{\det(\mathbf A)} A−1=det(A)CT。其中 C T \mathbf C^{\mathrm T} CT表示 A \mathbf A A的伴随矩阵。
( A B ) − 1 = B − 1 A − 1 (\mathbf{AB})^{-1}=\mathbf B^{-1}\mathbf A^{-1} (AB)−1=B−1A−1。
克拉默法则(Carmer’s Rule)
对于 n n n元线性方程组
{ a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n = b 1 a 21 x 1 + a 22 x 2 + ⋯ + a 2 n x n = b 2 ⋮ a n 1 x 1 + a n 2 x 2 + ⋯ + a n n x n = b n \begin{cases}a_{11}x_1+a_{12}x_2+\cdots+a_{1n}x_n=b_1\\a_{21}x_1+a_{22}x_2+\cdots+a_{2n}x_n=b_2\\\qquad\qquad\qquad\quad\;\,\vdots\\a_{n1}x_1+a_{n2}x_2+\cdots+a_{nn}x_n=b_n\end{cases} ⎩