2019.8.3 金华正睿集训总结Day7

8.3

数论还是很难,上午的内容部分之前讲过,听着还好,下午的。。。本人已自闭

上午

质因子分解

两种常见的素性测试

试除法,配合质数筛法可以做到 O(sqrt(n)) 的复杂度。

Miller-Rabin 素性测试,可以做到 O(log n) 的复杂度,属于RP 算法。

(其它还有印度人的 AKS 算法可以做到正确率 100% 的O(log n) 复杂度。)

但一般用Miller-Rabin素性测试就可以了。

Miller-Rabin

基本原理是费马小定理:若 p 是质数, a, p 互质,则ap−1 ≡ 1 (mod p)。

于是对于某个 p,若能找到与它互质的 a 使得 ap−1≠ 1(mod p),则 p 必不是质数。

然而有一些合数 p,满足所有与它互质的 a 都有 ap−1 ≡ 1(mod p),这种数称为 Carmichael 数(如 561 = 3 ∗ 11 ∗ 17),这样的数是用上面的方法检验不出来的。

所以还需要奇素数判定。对于奇素数 p,如果 ap−1 ≡ 1(mod p) 即 (a ^{ p − 1 2 \frac{p - 1}{2} 2p1}+ 1)(a ^{ p − 1 2 \frac{p - 1}{2} 2p1} − 1) ≡ 0 (mod p),由于 Fp 是整环,所以 a ^{ p − 1 2 \frac{p - 1}{2} 2p1} ≡ 1 或 p − 1。 如果 p − 1 2 \frac{p - 1}{2} 2p1 还是偶数则可以继续往下检验

这样可以保证对于任意合数至少存在一个 a 可以判定它是合数。

两种常见的质因子分解方法

试除法,复杂度 O(sqrt(n))

Pollard’s Rho,期望复杂度 O(4√n log n),又名启发式分解

启发式分解

n 是素数的时候用 Miller-Rabin 素性测试。

n 不是素数的时候,复杂度只和最小的质因子有关。所以称为启发式。

Pollards’ Rho

假如要分解一个数 n:

首先进行素性测试,是素数直接返回。

否则就要生成一些随机的 xi,去求 gcd(|xi − xj|, n),如果这个∈ (1; n) 则找到了 n 的一个因子,递归分解。

一个挺靠谱的随机方法就是 x <-- x2 + c, c 是个随机数。

这样随机出来的 x 可能会进入循环,假如进入循环了我们还没找到因子,就重新随个 x 和 c,重新做。

如何判断已经进入循环

可以证明 x<–x2 + c,形成的一定是一个 ρ 形结构。

每次当 i 为 2 的幂次的时候就令 y <–xi,如果某时刻 xi = y了则说明已经在环上绕了一圈了。

即:看 x(2,4] 是否 = x2,看 x(4,8]是否 = x4,看 x(8,16] 是否= x8……

这样“浪费”的步数仅仅是 O( 环长 ) 级别的。

数论

欧几里得算法
欧几里得求gcd

若 x|a,x|b,则 x|a + b。

于是 gcd(a,b) = gcd(b,a%b)。

复杂度为O(log(a + b))

扩展欧几里得算法

已知 a,b,求出 x, y 满足 ax + by = gcd(a, b)。

在欧几里德算法中递归地求:若已有 b = 0,则 gcd = a,令x = 1, y = 0。

否则求出 x′; y′ 满足

bx′ + (a − a/b ∗ b) ∗ y′ = gcd(b,a%b) = gcd(a,b)。

于是 a ∗ y′ + b ∗ (x′ − a/b ∗ y′) = gcd(a; b)。

辗转相减(除)的其他用处

用一个环定义带余除法,在上面辗转相减(除),比如模合数的环、多项式环等;

比如求行列式模一个合数,根据行列式的性质可以把一行的倍数加到另一行上。辗转相减把其中一个位置消成 0 即可。

比如求两个多项式的最大公约式,或者说多项式取模,可以不停地把一个的倍数加到另一个上,把其中一个多项式变成 0。

类欧几里得:一条直线下的整点数;利用欧几里得的思想,不断缩小问题规模

最基本的模型: solve(n; A; B; C) = ∑ i = 1 n \sum_{i =1}^{n} i=1n A i + B C \frac{Ai+B}{C} CAi+B

复杂度同欧几里德算法,为O(log C)

中国剩余定理

有 n 个方程 x ≡ ai (mod pi), pi 两两互质,求 x。

设 wi = ∏ (j ≠ i )pj,则答案 ≡ ∑ i = 1 n \sum_{i = 1}^{n} i=1n ai ∗ wi ∗ inv(wi; pi)。

拓展中国剩余定理

如果模数不互质,只要两两合并方程即可。

用普通中国剩余定理求出 w

w ≡ (a1/d) (mod p1/d); w ≡ (a2/d) (mod p2/d)。

每次把两个方程合并成一个模数是它们 lcm 的方程

费马小定理

p 是质数,则 ap ≡ a (mod p)。

欧拉定理

p > 1, a; p 互质,则 aϕ§ ≡ 1 (mod p)。

证明: a; p 互质,于是对于缩系内所有 x, ax 同样构成缩系。即 ∏(gcd(x,p)=1) ax ≡ ∏(gcd(x,p)=1) x。于是 aϕ§ ≡ 1

拓展欧拉定理


公式太难打,上图吧

离散对数问题
BSGS

已知 A, B, C,求 x 使 Ax ≡ B (mod C)。

如果 C 是合数可以拆成质数的幂,然后中国剩余定理合并起来。于是考虑 C = pc。先假设 A,C 互质。

令 S = sqrt ( C),如果有 x = k1S − k2,有 (AS)k1 ≡ BAk2(mod C)。

把一边放入 Hash 表,另一边查询即可。复杂度 O(sqrt( C))。

原根相关
缩系、原根

循环群:指群可以由一个元素生成: G = x, x2, x3…。

:满足 xd = 1 的最小正整数 d。记为 ord(x)。 xm = 1 当且仅当 ord(x) | m。

模素数 p 的剩余类构成一个有限域。

模 m 意义下与 m 互质的元素组成缩系,大小为 ϕ(m)。

原根:能生成缩系的元素,即 xi 两两不同(0 ≤ i < ϕ(m))的 x。原根不一定存在。事实上,当且仅当 m = 2, 4, pk, 2 ∗ pk 时模 m 缩系的原根存在。 p 是任意奇质数。

二次剩余
勒让德符号

记 ( a p \frac{a}{p} pa) 为勒让德符号, p 是一个奇素数。

( a p \frac{a}{p} pa) ≡ 1 表示 a 是模 p 域下的二次剩余, −1 表示是二次非剩余。

计算方法(欧拉准则): ( a p \frac{a}{p} pa) ≡ a ^ p − 1 2 \frac{p-1}{2} 2p1 (mod p)。

二次互反律:对于奇素数 p; q,有 ( p q \frac{p}{q} qp) ( q p \frac{q}{p} pq) = (−1) ^ ( p − 1 ) ( q − 1 ) 4 \frac{(p−1)(q−1)}{4} 4(p1)(q1)

计算二次剩余的方法

原根法:如果存在原根,可以求出原根并 BSGS 求出指数,除以 2 即可。复杂度 O(sqrt§)。

Tonelli–Shanks 算法:复杂度 O(log2 p)。这里不作介绍。

Cipolla 算法:复杂度 O(log p)

下午

数论函数

数论函数:定义域为正整数集,陪域为复数域的函数。
在这里插入图片描述
表示某些数学符号不会打

积性函数的性质

性质 1:设 n = ∏ pi qi,那么 f(n) = ∏ f(piqi)。

于是可以用线性筛求出 g(n) = piqi,然后f(n) = f( g(n) ) f( n g ( n ) \frac{n}{g(n)} g(n)n),在 O(n) 时间内预处理积性函数的值。

性质 2:若函数 f(n), g(n) 都是积性函数,那么下列函数都是积性函数: (fg)(n), (f/g)(n)。

狄利克雷卷积

两个数论函数的狄利克雷卷积(f ∗ g)(n) = ∑ d ∣ n \sum_{d|n} dnf(d)g( n d \frac{n}{d} dn)

满足:

交换律: f ∗ g = g ∗ f

结合律: (f ∗ g) ∗ h = f ∗ (g ∗ h)

分配律: f ∗ (g + h) = f ∗ g + f ∗ h

单位元: f ∗ ϵ = f

若 f; g 是积性函数则 f ∗ g 也是积性函数。

莫比乌斯反演

在这里插入图片描述
在这里插入图片描述

杜教筛

在这里插入图片描述

我真的太难了

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值