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

版权声明:转载必须注明原文链接,并且每50字(半角,向上取整)就要注明一次,侵权必究 https://blog.csdn.net/myjs999/article/details/89431517

主要写于2018.9

欧拉函数

奇偶性

2 φ ( n ) n = ̸ 2 2|\varphi(n)\Leftrightarrow n =\not 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))}

互质的数的和

n n 小的与 n n 互质的数的和为 n φ ( n ) 2 n\cdot \frac{\varphi(n)}{2}

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

反演性质

d n φ ( d ) = n \sum_{d|n}\varphi(d)=n

Miller-Rabin 质数测试

二次探测定理

n n 意义下若存在 a k = ̸ 1 a^k=\not 1 a k = ̸ n 1 a^k=\not n-1 ,满足 a 2 k = 1 a^{2k}=1 ,则 n n 不是质数。

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

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

算法

n 1 n-1 分解为 u 2 t ( 2 u ) u\cdot 2^t(2\nmid u) 。每次在 [ 1 , n 1 ] [1,n-1] 中随机 a a 作底数(即上面提到的 a a ),枚举 2 2 的指数做二次探测定理,再做费马小定理,若是合数则可以直接判断,否则有一定概率是质数。实验证明对于数量为 1 0 5 10^5 级别的询问随机 8 8 次即可保证通过。

Pollard’s Rho 分解大数

生日悖论

不停地在 [ 1 , n ] [1,n] 中取随机数,会在 O ( n ) O(\sqrt n) 次第一次重复。

算法

gcd ( a b s ( x y ) , n ) = ̸ 1 \gcd(\mathrm{abs}(x-y),n)=\not 1 ,则找到一个因数。

x 0 = C x_0=C x i = x i 1 2 + c ( i > 0 ) x_i=x_{i-1}^2+c(i>0) y i = x 2 log 2 x y_i=x_{2^{\lfloor\log_2x\rfloor}} 。这样枚举 i i ,若 gcd = ̸ 1 \gcd=\not1 则找到,若 x = y x=y 则找不到。

于是每次随机 C C c c ,可证明期望 O ( p ) O(\sqrt p) 次可找到一个大小为 p p 的因数。

二次剩余

欧拉准则

p p 意义下, a a 是二次剩余等价于 a p 1 2 1 a^{\frac{p-1}{2}}\equiv 1 a a 不是二次剩余等价于 a p 1 2 1 a^{\frac{p-1}{2}}\equiv -1

Cipolla算法

a 2 n a^2-n 不是二次剩余,则 n n 的二次剩余是 ( a + a 2 n ) p + 1 2 (a+\sqrt {a^2-n})^\frac{p+1}{2} 。可证明答案中根号项的系数为 0 0

随机 a a 即可。时间复杂度为 O ( log 2 p ) O(\log^2 p)

类欧几里得算法

(2019.4)

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

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

如果 a c a\ge c b c b\ge 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) ,其中 m = a m + b c m=\frac{am+b}{c}

f p , q f_{p,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

如果 a c a\ge c b c b\ge c 则可以先分离一部分,用二项式定理,转化为求 p p 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

SB树

SB树
*from https://en.wikipedia.org/wiki/Stern–Brocot_tree

可用于在分数域上二分。

猜你喜欢

转载自blog.csdn.net/myjs999/article/details/89431517