简单数论复习
模板有标记。
P5514
CF1322B
按位考虑, 两个数的和的第 k 位的取值只与这两个数的低位有关, 所以在考虑从低到高第 k 位(从 0 开始)的时候, 把所有数对 \(2^{k+1}\) 取模。
对于两个取模后的数, 如果要在第 k 位为 1, 和必须在 \([2^k,2^{k+1}-1]\) 或 \([2^{k+1}+2^k, 2^{k+2}-2]\) 中。
双指针计算即可。
【记录】
P5535
伯特兰-切比雪夫定理
若整数 n > 3, 则至少存在一个质数 p 满足 \(n<p<2n-2\)。
另一个稍弱说法是, 若整数 n > 1, 存在一个质数 p 满足 \(n<p<2n\)。
对于本题,若 k+1 为质数, 那么第一天不是 k+1 倍数的都将知道, 那么如果 (k+1)*2 > n + 1, 只需一天所有数就都知道了;如果 2~n+1 中有 k+1 的倍数, 那么只需两天, 这是因为相邻数的 gcd 为 1。
若 k+1 不是质数,不会证。
P1072
由于 x 必然为 \(b_1\) 的约数, 所以 x 可能拥有的质因子集合找到了。
然后, 题目的两个约束可以限定质因子的幂次的范围。
然后直接扫过去就行了,可以过。
当然,也可以直接 dfs 求出 \(b_1\) 所有的约数然后一个一个判断。
【记录】
P2152
高精度!不写了!
P2158
显然同斜率的只有离 C 君最近的才可以被看到。
那么答案就是 \(3+2*\sum\limits_{i=2}^{N-1}\varphi(i)\), 记得特判 n=1。
【记录】
P2398
关于这个 \(g\), \(id = 1*g\), 那么显然这个 g 是 \(\varphi\)。
【记录】
要记住 \(\varphi(1)=1\) 和 \(\mu(1) = 1\) !!!
P2568
首先枚举 p, 问题变成 \(1\le x,y\le \lfloor n/p\rfloor\) 中互质的 x,y 对数, 可以直接用 \(\varphi\) 搞, 这个是 \(1+2\cdot\sum\limits_{i=2}^{\lfloor n/p\rfloor}\varphi(i)\)。
【记录】
P4139【扩展欧拉定理】
由于 \(2^{2^{2^{\cdots}}}\) 太大,可以直接用扩展欧拉定理。
扩展欧拉定理:
直觉上递归不会太多次, 直接在过程中暴力计算 \(\varphi\)。
【记录】
P4549
裴蜀定理可以推广到多个数。
P2613
欧拉定理求逆元的代码测试题。
P3811【模数为质数时预处理逆元】
当 mod 为质数时,可用:
inv[1] = 1;
for (int i = 2; i < mod; ++ i)
inv[i] = (mod - mod / i) * inv[mod % i] % mod;
这样推导:
P5431【预处理一堆逆元】
求前缀乘积, 然后求全乘起来的逆元, 然后这个可以用来求前缀乘积的逆元。
然后前缀乘积的逆元和前缀乘积可以组合成逆元。
总复杂度 \(O(n+\log w)\)。
P3951【小凯的疑惑/同余最短路】
著名的小凯的疑惑。
介绍看到的用同余最短路理解的方法。
首先关于同余最短路:
lg2371
【记录】
令 \(a<b\), 模拟一下同余最短路的过程:
\(0\to b\mod a \to 2b \mod a\to \cdots\to (a-1)b\mod a\to 0\)
对于膜 a 的等价类, 都有一个最小的可以被表示出来的数, 把这个数减去 a 就是最大的不可以被表示出来的数(仅限当前等价类)。
观察上面那个最短路的过程, 可以发现每个点被遍历到的时候都是走的最短路, 所以本题的答案显然就是 \((a-1)b-a\) 也就是传说中的 \(ab-a-b\)。
P1082
基本的 exgcd
【记录】
P1516【exgcd】
基础练习题
【记录】
P3846【BSGS】
也就是离散对数, 直接分块搞。
【记录】
P6091【原根】
求所有原根, 需要先求最小原根, 然后对于与模数的 φ 互质的数, 将它们作为最小原根的次数, 可以得到所有原根。
【记录】
P5491【二次剩余】
【rqy的介绍】
抄一下。
以下 p 都指奇素数。
称 \(a\) 是 \(\mod p\) 意义下的二次剩余(感性记忆就是 “可开方的”), 如果存在 \(b\in\mathbb F_p\) 使得 \(b^2 = a\)。
性质:
-
在 \(1,...,p-1\) 中恰有一半二次剩余。
设 g 是 \(\mathbb F_p\) 的原根 ,那么二次剩余恰为 \(g^0,g^2,g^4,\dots,g^{p-3}\)。
稍微解释一下,这是因为 \(\mathbb F_p\) 中的所有数都可以用 g 的幂次表示, 而由于 g 是最小原根,所以 g 不可开方。
-
xy 是二次剩余当且仅当 x,y 都是或都不是二次剩余。
结合上面的比较显然。
-
令 \((\frac ap)\) (Legendre symble) 为:
\[\]\begin{cases}
0\quad ;;;a\equiv 0\
1\quad ;;;a 是二次剩余\
-1\quad a 不是二次剩余
\end{cases}\[\]如果 \(a=g^u\), 那么 \(a^{(p-1)/2} = g^{u(p-1)/2}\), u 为偶数的时候, 显然这个式子等于 1, 反之, 等于 -1。这是因为 \(g^{(p-1)/2}\equiv -1\)。(猜的)
Cipolla 算法
现在的问题是, 已知 n 是二次剩余, 如何求出一个 \(x\in\mathbb F_p\) 使得 \(x^2 = n\)?
首先找到一个 \(a\in \mathbb F_p\) 使得 \(a^2-n\) 不是二次剩余。
可以随机 a, 可以证明满足条件的 \(a\) 有 \(\frac{p-1}2\) 个, 所以期望 \(\frac{2p}{p-1}\approx 2\) 次就可以找到一个。(暂时不会证)
接下来以 \(a^2-n\) 作为类似复数域的虚部 \(i^2\) 的东西造一个类似复数域的东西,考虑扩域 \(\mathbb F_p[\sqrt{a^2-n}]\), 其由所有形如 \(u+v\sqrt{a^2-n}\) 的数组成,其中 \(u,v\in\mathbb F_p\)。记 \(\alpha = \sqrt{a^2-n}\), 那么域中的数即为 \(u+v\alpha\)。
在这个域中,有一些性质:
- \((x+y)^p = x^p+y^p\)(可用二项式定理展开后证明, 实际上,任何每个元素的 p 倍都是 0 的域中, 这个性质都成立)
- \(\alpha^p = -\alpha\)。因为 \(\alpha^p = (a^2-n)^{(p-1)/2}\alpha = -\alpha\)。
现在令 \(x = (a+\alpha)^{(p+1)/2}\)
那么:
于是现在在 \(\mathbb F_p[\sqrt{a^2-n}]\) 中求得了 \(x^2=n\) 的一个解 \(x\)。还需要说明 \(x\) 一定属于 \(\mathbb F_p\)。
这个等价于证 \(x\) 的虚部为 0, 反证法即可。
【记录】
P2485
【记录】
P3306
细节太多先咕着。
P4884
【记录】
分配律的大膜数乘法比较靠谱, 那个用 double 的比较看不懂。