主要写于2018.9
欧拉函数
奇偶性
2 ∣ φ ( n ) ⇔ n = ̸ 2 2|\varphi(n)\Leftrightarrow n =\not 2 2∣φ(n)⇔n≠2
约数拆分
φ ( p q ) = φ ( p ) φ ( q ) gcd ( p , q ) φ ( gcd ( p , q ) ) \varphi(pq)=\frac{\varphi(p)\varphi(q)\gcd(p,q)}{\varphi(\gcd(p,q))} φ(pq)=φ(gcd(p,q))φ(p)φ(q)gcd(p,q)
互质的数的和
比 n n n小的与 n n n互质的数的和为 n ⋅ φ ( n ) 2 n\cdot \frac{\varphi(n)}{2} n⋅2φ(n)。
证明:满足条件的数是成对出现的,可分为 φ ( n ) 2 \frac{\varphi(n)}{2} 2φ(n)组,每组和为 n n n。
反演性质
∑ d ∣ n φ ( d ) = n \sum_{d|n}\varphi(d)=n d∣n∑φ(d)=n
Miller-Rabin 质数测试
二次探测定理
模 n n n意义下若存在 a k = ̸ 1 a^k=\not 1 ak≠1且 a k = ̸ n − 1 a^k=\not n-1 ak≠n−1,满足 a 2 k = 1 a^{2k}=1 a2k=1,则 n n n不是质数。
欧拉定理推论(费马小定理)
若 n n n是质数,则对于任意 a ( n ∤ a ) a(n\nmid a) a(n∤a), a n − 1 = 1 ( m o d n ) a^{n-1}= 1\pmod n an−1=1(modn)。
算法
将 n − 1 n-1 n−1分解为 u ⋅ 2 t ( 2 ∤ u ) u\cdot 2^t(2\nmid u) u⋅2t(2∤u)。每次在 [ 1 , n − 1 ] [1,n-1] [1,n−1]中随机 a a a作底数(即上面提到的 a a a),枚举 2 2 2的指数做二次探测定理,再做费马小定理,若是合数则可以直接判断,否则有一定概率是质数。实验证明对于数量为 1 0 5 10^5 105级别的询问随机 8 8 8次即可保证通过。
Pollard’s Rho 分解大数
生日悖论
不停地在 [ 1 , n ] [1,n] [1,n]中取随机数,会在 O ( n ) O(\sqrt n) O(n)次第一次重复。
算法
若 gcd ( a b s ( x − y ) , n ) = ̸ 1 \gcd(\mathrm{abs}(x-y),n)=\not 1 gcd(abs(x−y),n)≠1,则找到一个因数。
设 x 0 = C x_0=C x0=C, x i = x i − 1 2 + c ( i > 0 ) x_i=x_{i-1}^2+c(i>0) xi=xi−12+c(i>0), y i = x 2 ⌊ log 2 x ⌋ y_i=x_{2^{\lfloor\log_2x\rfloor}} yi=x2⌊log2x⌋。这样枚举 i i i,若 gcd = ̸ 1 \gcd=\not1 gcd≠1则找到,若 x = y x=y x=y则找不到。
于是每次随机 C C C和 c c c,可证明期望 O ( p ) O(\sqrt p) O(p)次可找到一个大小为 p p p的因数。
二次剩余
欧拉准则
模 p p p意义下, a a a是二次剩余等价于 a p − 1 2 ≡ 1 a^{\frac{p-1}{2}}\equiv 1 a2p−1≡1, a a a不是二次剩余等价于 a p − 1 2 ≡ − 1 a^{\frac{p-1}{2}}\equiv -1 a2p−1≡−1。
Cipolla算法
若 a 2 − n a^2-n a2−n不是二次剩余,则 n n n的二次剩余是 ( a + a 2 − n ) p + 1 2 (a+\sqrt {a^2-n})^\frac{p+1}{2} (a+a2−n)2p+1。可证明答案中根号项的系数为 0 0 0。
随机 a a a即可。时间复杂度为 O ( log 2 p ) O(\log^2 p) O(log2p)。
类欧几里得算法
(2019.4)
f f f函数
f ( n , a , b , c ) = ∑ i = 0 n ⌊ a i + b c ⌋ f(n,a,b,c)=\sum_{i=0}^{n}\lfloor\frac{ai+b}{c}\rfloor f(n,a,b,c)=i=0∑n⌊cai+b⌋
其中 a a a、 b b b和 c c c均为整数。
如果 a ≥ c a\ge c a≥c或 b ≥ c b\ge c b≥c则可以先分离一部分。否则将后面展开然后交换和号再化简得到 f ( n , a , b , c ) = n m − f ( m − 1 , c , c − b − 1 , a ) f(n,a,b,c)=nm-f(m-1,c,c-b-1,a) f(n,a,b,c)=nm−f(m−1,c,c−b−1,a),其中 m = a m + b c m=\frac{am+b}{c} m=cam+b。
f p , q f_{p,q} fp,q函数
f p , q ( n , a , b , c ) = ∑ i = 0 n i p ⌊ a i + b c ⌋ q f_{p,q}(n,a,b,c)=\sum_{i=0}^{n}i^p\lfloor\frac{ai+b}{c}\rfloor^q fp,q(n,a,b,c)=i=0∑nip⌊cai+b⌋q
如果 a ≥ c a\ge c a≥c或 b ≥ c b\ge c b≥c则可以先分离一部分,用二项式定理,转化为求 p p p、 q q q更小的函数值。否则过程差不多。要用精彩变换(fjzzq2002©) x k = ∑ i = 0 x − 1 ( i + 1 ) k − i k x^k=\sum_{i=0}^{x-1}(i+1)^k-i^k xk=∑i=0x−1(i+1)k−ik。
SB树
*from https://en.wikipedia.org/wiki/Stern–Brocot_tree
可用于在分数域上二分。
威尔逊定理
4.26
(
p
−
1
)
!
≡
p
−
1
(
m
o
d
p
)
(p-1)!\equiv p-1\pmod p
(p−1)!≡p−1(modp)