数学基础4 Euler函数 二次剩余 米拉质数测试 波拉德的罗 类欧几里得算法 Stern-Brocot树

主要写于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} n2φ(n)

证明:满足条件的数是成对出现的,可分为 φ ( n ) 2 \frac{\varphi(n)}{2} 2φ(n)组,每组和为 n n n

反演性质

∑ d ∣ n φ ( d ) = n \sum_{d|n}\varphi(d)=n dnφ(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≠n1,满足 a 2 k = 1 a^{2k}=1 a2k=1,则 n n n不是质数。

欧拉定理推论(费马小定理)

n n n是质数,则对于任意 a ( n ∤ a ) a(n\nmid a) a(na) a n − 1 = 1 ( m o d n ) a^{n-1}= 1\pmod n an1=1(modn)

算法

n − 1 n-1 n1分解为 u ⋅ 2 t ( 2 ∤ u ) u\cdot 2^t(2\nmid u) u2t(2u)。每次在 [ 1 , n − 1 ] [1,n-1] [1,n1]中随机 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(xy),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=xi12+c(i>0) y i = x 2 ⌊ log ⁡ 2 x ⌋ y_i=x_{2^{\lfloor\log_2x\rfloor}} yi=x2log2x。这样枚举 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 a2p11 a a a不是二次剩余等价于 a p − 1 2 ≡ − 1 a^{\frac{p-1}{2}}\equiv -1 a2p11

Cipolla算法

a 2 − n a^2-n a2n不是二次剩余,则 n n n的二次剩余是 ( a + a 2 − n ) p + 1 2 (a+\sqrt {a^2-n})^\frac{p+1}{2} (a+a2n )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=0ncai+b

其中 a a a b b b c c c均为整数。

如果 a ≥ c a\ge c ac b ≥ c b\ge c bc则可以先分离一部分。否则将后面展开然后交换和号再化简得到 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)=nmf(m1,c,cb1,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=0nipcai+bq

如果 a ≥ c a\ge c ac b ≥ c b\ge c bc则可以先分离一部分,用二项式定理,转化为求 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=0x1(i+1)kik

SB树

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 (p1)!p1(modp)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值