模板有标记。
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*sumlimits_{i=2}^{N-1}varphi(i)), 记得特判 n=1。
【记录】
P2398
关于这个 (g), (id = 1*g), 那么显然这个 g 是 (varphi)。
【记录】
要记住 (varphi(1)=1) 和 (mu(1) = 1) !!!
P2568
首先枚举 p, 问题变成 (1le x,yle lfloor n/p floor) 中互质的 x,y 对数, 可以直接用 (varphi) 搞, 这个是 (1+2cdotsumlimits_{i=2}^{lfloor n/p floor}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 o bmod a o 2b mod a o cdots o (a-1)bmod a o 0)
对于膜 a 的等价类, 都有一个最小的可以被表示出来的数, 把这个数减去 a 就是最大的不可以被表示出来的数(仅限当前等价类)。
观察上面那个最短路的过程, 可以发现每个点被遍历到的时候都是走的最短路, 所以本题的答案显然就是 ((a-1)b-a) 也就是传说中的 (ab-a-b)。
P1082
基本的 exgcd
【记录】
P1516【exgcd】
基础练习题
【记录】
P3846【BSGS】
也就是离散对数, 直接分块搞。
【记录】
P6091【原根】
求所有原根, 需要先求最小原根, 然后对于与模数的 φ 互质的数, 将它们作为最小原根的次数, 可以得到所有原根。
【记录】
P5491【二次剩余】
【rqy的介绍】
抄一下。
以下 p 都指奇素数。
称 (a) 是 (mod p) 意义下的二次剩余(感性记忆就是 “可开方的”), 如果存在 (binmathbb 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) 为:
[]egin{cases}
0quad ;;;aequiv 0
1quad ;;;a 是二次剩余
-1quad 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 是二次剩余, 如何求出一个 (xinmathbb F_p) 使得 (x^2 = n)?
首先找到一个 (ain 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+vsqrt{a^2-n}) 的数组成,其中 (u,vinmathbb F_p)。记 (alpha = sqrt{a^2-n}), 那么域中的数即为 (u+valpha)。
在这个域中,有一些性质:
- ((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 的比较看不懂。