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

主要写于2018.9

欧拉函数

奇偶性

2φ(n)n≠22|\varphi(n)\Leftrightarrow n =\not 2

约数拆分

φ(pq)=φ(p)φ(q)gcd(p,q)φ(gcd(p,q))\varphi(pq)=\frac{\varphi(p)\varphi(q)\gcd(p,q)}{\varphi(\gcd(p,q))}

互质的数的和

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

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

反演性质

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

Miller-Rabin 质数测试

二次探测定理

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

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

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

算法

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

Pollard’s Rho 分解大数

生日悖论

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

算法

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

x0=Cx_0=Cxi=xi12+c(i>0)x_i=x_{i-1}^2+c(i>0)yi=x2log2xy_i=x_{2^{\lfloor\log_2x\rfloor}}。这样枚举ii,若gcd≠1\gcd=\not1则找到,若x=yx=y则找不到。

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

二次剩余

欧拉准则

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

Cipolla算法

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

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

类欧几里得算法

(2019.4)

ff函数

f(n,a,b,c)=i=0nai+bc f(n,a,b,c)=\sum_{i=0}^{n}\lfloor\frac{ai+b}{c}\rfloor

其中aabbcc均为整数。

如果aca\ge cbcb\ge c则可以先分离一部分。否则将后面展开然后交换和号再化简得到f(n,a,b,c)=nmf(m1,c,cb1,a)f(n,a,b,c)=nm-f(m-1,c,c-b-1,a),其中m=am+bcm=\frac{am+b}{c}

fp,qf_{p,q}函数

fp,q(n,a,b,c)=i=0nipai+bcq f_{p,q}(n,a,b,c)=\sum_{i=0}^{n}i^p\lfloor\frac{ai+b}{c}\rfloor^q

如果aca\ge cbcb\ge c则可以先分离一部分,用二项式定理,转化为求ppqq更小的函数值。否则过程差不多。要用精彩变换(fjzzq2002©)xk=i=0x1(i+1)kikx^k=\sum_{i=0}^{x-1}(i+1)^k-i^k

SB树

数学基础4 Euler函数 二次剩余 米拉质数测试 波拉德的罗 类欧几里得算法 Stern-Brocot树
*from https://en.wikipedia.org/wiki/Stern–Brocot_tree

可用于在分数域上二分。

威尔逊定理

4.26
(p1)!p1(modp)(p-1)!\equiv p-1\pmod p