本文将尽量包含所有省选范围内的数学知识。
本文会涉及到的数学模块:
-
基础数学
-
初等数论
-
排列组合
-
概率与期望
-
线性代数
-
多项式相关
-
博弈论
前置知识
进制转化
相信读者已经掌握了最基本的进制转换方法,接下来将简单说明十进制转换二进制的正确性。
对于十进制数 \(x\),我们会将 \(x&1\) 作为对应二进制数的最低位,接着令 \(x\leftarrow \lfloor\frac{x}{2}\rfloor\)。
可以发现,\(x&1\) 即是求 \(x\) 二进制下的最低位,接下来的右移操作,则是将问题规模缩小,变成一个相同的子问题,由于之前已经经历过 \(y\) 次右移,此时得到的最低位经过 \(y\) 次左移应该变成二进制下的第 \(y\) 位。
位运算相关
首先给出补码的定义:在计算机中,非负数的补码为其本身,负数补码为其二进制下按位取反后 +1 得到的结果。
负数不能执行左移操作。
数论
整除
\(a,b\in Z,a\ne 0,\exists q\in Z\) 使得 \(b=aq\),我们就称 \(a|b\)。
关于整除的性质,都较为显然,读者或许可以在需要时自行推理得出。
平凡因数:对于 \(b\in Z\),把 \(\pm 1,\pm b\) 称为 \(b\) 的平凡因数。
素数相关
严格判定这里不再叙述。
素性测试:一种不对素数进行分解而判定的方法。
-
确定性测试,顾名思义。
-
概率性测试,利用随机算法判定素数,对于判定为素数,实际为合数的数,称为伪素数。
最大公因数相关
Euclidean algorithm
通常称为“辗转相除法”,接下来将证明该算法基本定理 \(\gcd(a,b)=\gcd(b,a\mod b)\)。
我们主要基于 \(a\in b,b\in a\rightarrow a=b\) 进行证明。
令 \(a\geq b\),设 \(a=bk+c\),显然 \(c=a\mod b\);设 \(d|a,d|b\),\(\frac{a}{d}-k\times\frac{b}{d}=\frac{c}{d}\rightarrow d|c\),即 \(d|a\mod b\),又因为 \(d|a,d|b\),所以对于任意 \(d|a,d|b\),存在 \(d|b,d|a\mod b\)
同理,可得对于 \(d|b,a\d|a\mod b\),存在 \(d|a,d|b\)。综上,得证。
该定理的基本实现相信读者已经知晓。
更相减损法
咕
exgcd
求解 \(ax+by=\gcd(a,b)\),其中 \(a,b\) 为常数。
当 \(b=0\) 时,\(\gcd(a,0)=a\) (回想一下利用辗转相除法的最后一层)。此时 \(ax+0\times y=a\),容易发现 \(x=1\),\(y\) 取任意值。
借助欧几里得算法的思想,发现 \(\gcd(a,0)\) 正是递归的最后一层,考虑倒数第二层的求法。设倒数第二层为 \(\gcd(a,b)\),把最后一层改为 \(\gcd(b,a\mod b)\),要求解 \(ax+by=\gcd(a,b)\),发现 \(bx'+y'\times (a\mod b)=\gcd(b,a\mod b)\),接下来进行推导。
\[bx'+y'\times(a-b\times\lfloor \frac{a}{b}\rfloor )=\gcd(b,a\mod b) \]\[bx'+y'a-y'b\times\lfloor\frac{a}{b}\rfloor=\gcd(b,a\mod b) \]\[y'a+b(x'-y'\times\lfloor\frac{a}{b}\rfloor)=\gcd(b,a\mod b) \]结合这两个式子来看:
-
\(ax+by=\gcd(a,b)\)
-
\(ay'+b(x'-y'\times\lfloor\frac{a}{b}\rfloor)=\gcd(b,a\mod b)\)
得到 \(x=y',y=x'-y'\times\lfloor\frac{a}{b}\rfloor\)。
现在问题转变成了求解 \(x',y'\)。
根据刚才对于最后一层的求解,我们已经可以求出该层的答案。注意在最后一层中,\(y\) 为任意值,这里尽量取 \(0\)。
于是我们这样递归求解,即可得到一组合法的解。
标签:lfloor,frac,gcd,rfloor,times,数学,mod From: https://www.cnblogs.com/BYR-KKK/p/18010295