数论选讲(更新中)

数论选讲

文章目录

  • 数论选讲
    • 一,素数判定与因数分解
      • 1.素数判定
        • 1.1 Miller-Rabin
          • 二次探测证明:
          • 1.1.1 算法流程(判断数n是否为质数):
      • 2.因数分解
        • 2.1 Fermat整数分解法
          • 2.1.1 考虑分解数n:
        • 2.2 Pollard-Rho算法
          • 2.2.1 算法流程(已经验证n不是质数或1):
          • 2.2.2 复杂度分析:
        • 2.3 Quadratic Sieve Algorithm 二次筛法
    • 二,中国剩余定理及其扩展
      • 1. 一元线性同余方程
      • 2. 一元线性同余方程组
      • 3. 中国剩余定理CRT
      • 4. 扩展中国剩余定理exCRT
    • 三,原根,n次剩余与离散对数
      • 1.原根
        • 1.1 找原根
        • 1.2 指标
      • 2.离散对数
        • 2.1 BSGS
          • 2.1.1 前置知识:指数模的周期性
        • 2.2 exBSGS
      • 3.n次剩余
        • 3.1 p为奇质数的情况
        • 3.2 p=2的情况
      • 4.二次剩余
        • 4.1 p为奇质数且k=1的情况
          • 4.1.1 解的存在性
          • 4.1.2 Cipolla算法
          • 4.1.3 寻找二次非剩余
        • 4.2 p为奇质数且k>1的情况
          • 4.2.1 解的存在性
          • 4.2.2 从Cipolla推进
        • 4.3 p=2的情况
          • 4.3.1 解的存在性
          • 4.3.2 找规律+递推
    • 四,常见积性函数以及性质
      • 1.Dirichlet卷积
      • 2.常见积性函数
        • 2.1 一些Dirichlet卷积恒等式
      • 3. 一些积性函数的特性
        • 3.1 欧拉函数
        • 3.2 莫比乌斯函数
        • 3.3 约数个数函数
    • 五,莫比乌斯反演
      • 1.前缀和的反演形式
      • 2.后缀和的反演形式
      • 3.扩展到实数域上的反演形式
      • 4.对莫比乌斯反演的深刻认识
      • 5.反演后的计算——整除分块
    • 六,筛法
      • 1.埃氏筛
      • 2.欧拉筛
      • 3.杜教筛
      • 4.讲了估计也没人听的扩展埃氏筛
      • 5.过于毒瘤一般用于劝退的min_25和洲阁
    • 七,组合数取模
      • 1.枚举法
        • 1.1 直接枚举
        • 1.2 预处理
        • 1.3 质因数分解
      • 2.Lucas定理及其扩展
        • 2.1 Lucas定理
        • 2.2 扩展Lucas定理
    • 题目板块
      • [POI2002][HAOI2007]反素数
      • [HDU2138]How many prime numbers
      • [BZOJ3667]Rabin-Miller算法
      • [BZOJ4802]欧拉函数
      • [51nod1079]中国剩余定理
      • [WOJ4113]ZUA球困难综合征
      • [洛谷P4777]扩展中国剩余定理
      • [NOI2018]屠龙勇士
      • [51nod1135]原根
      • [HDU4992]Primitive Roots
      • [TJOI2007]可爱的质数
      • [CQOI2018]破解D-H协议
      • [POJ3243]Clever Y
      • [51nod1038]X^A Mod P
      • [HDU3930]Broot
      • [BZOJ2219]数论之神
      • [51nod1123]X^A Mod B
      • [Timus1132]Square Root
      • [SCOI2018]Numazu 的蜜柑
      • [WOJ4270]任意模数二次剩余
      • [洛谷P3935]Calculating
      • [LOJ125]除数函数求和 2
      • [CQOI2007]余数求和
      • [洛谷P5106] dkw的lcm
      • [BZOJ3560]DZY Loves Math V
      • [SPOJ LCMSUM]LCM Sum
      • [HAOI2011]Problem B
      • [BZOJ2820]YY的GCD
      • [NOI2010]能量采集
      • [51nod1675]序列变换
      • [BZOJ2154]Crash的数字表格
      • [BZOJ2694]Lcm
      • [洛谷P5176]公约数
      • [洛谷P4240]毒瘤之神的考验
      • [BZOJ3309]DZY Loves Math
      • [SDOI2017]数字表格
      • [NOI2016]循环之美
      • [BZOJ3561]DZY Loves Math VI
      • [BZOJ4174]tty的求助
      • [BZOJ3944]Sum
      • 几个杜教筛能够处理的式子
      • [洛谷P3768]简单的数学题
      • [BZOJ4176]Lucas的数论
      • [51nod1220]约数之和
      • [51nod2026]Gcd and Lcm
      • [51nod1238]最小公倍数之和V3

(初等数论基础概念就不普及了)

一些前置姿势:

  1. 素数分布:素数有无限个,用 π ( x ) \pi(x) π(x)表示小于 x x x的素数个数,则随着 x x x的增长,有 π ( x ) = Θ ( x ln ⁡ x ) \pi(x)=\Theta(\frac{x}{\ln x}) π(x)=Θ(lnxx),同时蕴含常数 1 1 1
    这个结论可以用于估计某些与枚举素数有关的算法的复杂度。

  2. 算术基本定理,又称唯一分解定理。
    对于任意正整数 n n n,唯一存在以下分解: n = ∏ i p i k i n=\prod_i p_i^{k_i} n=ipiki
    其中所有 p i p_i pi均为质数,且从小到大排列。

  3. O ( log ⁡ a ) O(\log a) O(loga) g c d gcd gcd算法和 e x g c d exgcd exgcd算法默认大家都会,并且知道exgcd怎么求模意义下本质不同解的个数以及输出所有解。

  4. 同余的一些术语大家假装都听得懂吧(不然没法讲了。。。)


一,素数判定与因数分解

1.素数判定

首先大家都会线性筛 O ( n ) O(n) O(n)筛出一部分质数

显然我们有试除法可以在 O ( n ) O(\sqrt n) O(n )时间内判断一个数是否是质数。

当然可以通过只枚举质数优化至 O ( n ln ⁡ n ) O(\frac{\sqrt n}{\ln n}) O(lnnn )

但是有的时候试除法复杂度也不够优秀,所以就需要Miller-Rabin算法。

1.1 Miller-Rabin

首先Miller-Rabin算法是一个随机算法,同时是一个概率算法(换句话说,有可能出错)

不过当测试次数足够多的时候,出错概率相当小就是了(反正脸黑的就多测几次就行了)。

前置姿势:

  1. 费马小定理:对于 p ∈ P , p ∤ a p\in \mathbb P,p\nmid a pP,pa a p − 1 ≡ 1 ( m o d p ) a^{p-1}\equiv 1\pmod p ap11(modp),不过反过来不一定了。。。
  2. 二次探测:对于素数 p p p,能够满足 x 2 ≡ 1 ( m o d p ) x^2\equiv 1\pmod p x21(modp)的同余类 x x x只有 x ≡ 1 ( m o d p ) x\equiv 1\pmod p x1(modp) x ≡ p − 1 ( m o d p ) x\equiv p-1\pmod p xp1(modp)
二次探测证明:

x 2 ≡ 1 ( m o d p ) x^2\equiv 1\pmod p x21(modp),则 x 2 = 1 + p k x^2=1+pk x2=1+pk,有 ( x + 1 ) ( x − 1 ) = p k (x+1)(x-1)=pk (x+1)(x1)=pk

必须有 p ∣ x + 1 p\mid x+1 px+1 p ∣ x − 1 p\mid x-1 px1,分别对应 x ≡ p − 1 ( m o d p ) x\equiv p-1\pmod p xp1(modp) x ≡ 1 ( m o d p ) x\equiv 1\pmod p x1(modp)

1.1.1 算法流程(判断数n是否为质数):
  1. 对于偶数,直接跳出循环,当然同时可以把几个小质数的倍数一起特判。
  2. 否则找出 s , t s,t s,t,使得 n − 1 = 2 s t n-1=2^st n1=2st,其中 2 ∤ t 2\nmid t 2t
  3. 随机选取质数 a a a
  4. 验证是否有 a n − 1 ≡ 1 ( m o d n ) a^{n-1}\equiv 1\pmod n an11(modn),如果不是则 n n n为合数
  5. 否则计算出 a t a^t at,然后进行 s s s % n \%n %n意义下的二次探测。
  6. 多重复几次就能大概率判断 n n n是否是一个质数。

一般我选择的是重复3~5次。

2.因数分解

同样的我们可以用试除法,复杂度同样不够优秀。。。

下面介绍一种根本没人用的方法:Fermat整数分解法。

2.1 Fermat整数分解法

首先,这个方法复杂度玄学,但是好于试除法。

怎么理解玄学这个事情。。。目前没有任何关于这个算法复杂度上界,下界,期望,渐进紧确界的任何断言或推论。

2.1.1 考虑分解数n:
  1. 如果是质数或1直接返回。
  2. 否则我们先把所有的质因子 2 2 2剔除,从 a = ⌊ n ⌋ + 1 a=\lfloor\sqrt n\rfloor+1 a=n +1开始往上枚举,计算 c = a 2 − n c=a^2-n c=a2n
  3. 如果存在正整数 b b b使得 b 2 = c b^2=c b2=c,则有 n = ( a + b ) ( a − b ) n=(a+b)(a-b) n=(a+b)(ab),递归分解即可。
  4. ⌊ c ⌋ + a > n \lfloor\sqrt c\rfloor+a > n c +a>n时返回,说明原本的 n n n肯定是一个质数。

然后来看Pollard-Rho算法

2.2 Pollard-Rho算法

同样的,这个也是一个随机算法,一部分效率是要看脸的。

考虑对于 ∀ a , n ∈ N ∗ , g c d ( a , n ) ∣ n \forall a,n\in \mathbb N_*,gcd(a,n)\mid n a,nN,gcd(a,n)n

而本身 g c d gcd gcd的复杂度只有 O ( log ⁡ n ) O(\log n) O(logn)级别,这给了我们启示,如何构造出一个靠谱的数 a a a,使得他包含 n n n的因子,就成了非常重要的问题。

一下直接假设 a a a n n n的因子且 a ≤ n a\leq \sqrt n an ,因为不是的那部分显然不重要。

我们在这个寻找过程中加入随机因素。

构造函数 f ( x , n ) = ( x 2 + c ) % n f(x,n)=(x^2+c)\%n f(x,n)=(x2+c)%n,其中 c c c是在每次Pollard-Rho之前决定好的在 [ 1 , n ) [1,n) [1,n)中的正整数,保证在 x = 1 x=1 x=1的时候不会陷入死循环中。

构造序列 { x } \{x\} {x},其中 x 1 = r a n d ( ) , x i = f ( x i − 1 , n ) x_1=rand(),x_i=f(x_{i-1},n) x1=rand(),xi=f(xi1,n)。我们可以认为它是近似随机的。(据说某版本C++的rand()也是这样实现的,不过略有区别)。

显然这个序列的轨迹要么是一个环,要么就是一个 ρ \rho ρ形(根据抽屉原理),且环长在 O ( n ) O(\sqrt n) O(n )的级别内,这个环暂且称为一环。

还有,澄清一点,很多博客声称这个 f f f函数是单射函数。。。但是显然不是,否则怎么来的 ρ \rho ρ形轨迹。至少显然 f ( x , n ) = f ( n − x , n ) f(x,n)=f(n-x,n) f(x,n)=f(nx,n) f f f就已经不是单射函数了。

然后考虑序列 { y } \{y\} {y},其中 y i = x i % a y_i=x_i\%a yi=xi%a(注意这里 a a a仍然是一个未知数),同理这个轨迹依然要么是环形要么是 ρ \rho ρ形,根据生日悖论,其环长在 O ( a ) ≤ O ( n 4 ) O(\sqrt a)\leq O(\sqrt[4]n) O(a )O(4n )规模。

考虑一环上两个不同的位置 x i ̸ = x j x_i\not=x_j xi̸=xj,如果它们对应二环上同一个位置 y i = y j y_i=y_j yi=yj,则有 j − i = O ( a ) , a ∣ ∣ x j − x i ∣ j-i=O(\sqrt a),a\mid |x_j-x_i| ji=O(a ),axjxi

这又给我们带来了一些启发。

如果我们能够找到一个 y i = x i % a y_i=x_i\%a yi=xi%a,然后 O ( a ) O(\sqrt a) O(a )枚举 x j x_j xj,当发现 1 < g c d ( n , ∣ x i − x j ∣ < n ) 1< gcd(n,|x_i-x_j| < n) 1<gcd(n,xixj<n)的时候,我们就找到了一个因数。

但是注意,目前 a a a仍然是一个未知数。

可以采用两种办法,Floyd判圈算法或者Brent‘s找环算法’。

由于Floyd判圈跑的贼慢,所以这里只介绍Brent’s。

2.2.1 算法流程(已经验证n不是质数或1):
  1. 首先令 x 1 = r a n d ( ) x_1=rand() x1=rand(),随机选择一个参数 c c c,当前环长 k = 1 k=1 k=1
  2. 然后向后扩展长度为环长的 x x x序列,记录 q = ∏ ∣ x 1 − x i ∣ q=\prod|x_1-x_i| q=x1xi
  3. 计算 t = g c d ( q , n ) t=gcd(q,n) t=gcd(q,n),如果 t = 1 t=1 t=1,令 x 1 = x k + 1 x_1=x_{k+1} x1=xk+1 k = k ∗ 2 k=k*2 k=k2,回到 2 2 2步。
  4. 否则,如果 t = n t=n t=n,回到 1 1 1
  5. 不然,我们就找到了一个 n n n的因数 t t t,递归分解 t t t n / t n/t n/t即可。
2.2.2 复杂度分析:

考虑处理一个因子时候的复杂度,若环长为 k k k,则枚举次数近似于:
T ( n ) = O ( k ) + O ( k 2 ) + O ( k 2 2 ) + … + O ( k 2 z ) T(n)=O(k)+O(\frac{k}2)+O(\frac{k}{2^2})+…+O(\frac{k}{2^z}) T(n)=O(k)+O(2k)+O(22k)++O(2zk)

这个数列是收敛的,化求和为积分后我们得到 T ( n ) = O ( k ) = O ( n 4 ) T(n)=O(k)=O(\sqrt[4]n) T(n)=O(k)=O(4n ),蕴含常数为 2 2 2。套上一个 g c d gcd gcd就是 O ( n 4 log ⁡ n ) O(\sqrt [4]n\log n) O(4n logn)

考虑计算所有因子的复杂度:
T ( n ) ≤ O ( n 4 log ⁡ n ) + T ( n 2 ) + T ( n 4 ) + … + T ( n 2 z ) = O ( n 4 log ⁡ n ) T(n)\leq O(\sqrt[4] n\log n)+T(\frac{n}2)+T(\frac{n}4)+…+T(\frac{n}{2^z})=O(\sqrt[4]n\log n) T(n)O(4n logn)+T(2n)+T(4n)++T(2zn)=O(4n logn)

然而实际上由于初期小因子较多,分解速度快,这个复杂度只有非常非常不走运的时候才会被卡到。

2.3 Quadratic Sieve Algorithm 二次筛法

以Fermat分解和二次剩余为基础的筛法,等熟练掌握Fermat和二次剩余之后再来看吧,这里放一个whzzt的博客:https://blog.csdn.net/whzzt/article/details/81069289

而且这个比Pollard-Rho快(小声BB),准确来说,复杂度远远优于Pollard-Rho。

不过比Pollard-Rho难写就是了。


二,中国剩余定理及其扩展

凭借强大的中国剩余定理,我们能够对很多同余问题进行快速的分解与合并,使得我们只需要考虑模数为质数的若干次幂的情况。

1. 一元线性同余方程

形如 f ( x ) ≡ a ( m o d n ) f(x)\equiv a\pmod n f(x)a(modn)的方程成为一元线性同余方程,其中 f ( x ) f(x) f(x)中只包含关于 x x x的线性变换。

相信大家都会用ex欧几里得来解,这里就不赘述了。

2. 一元线性同余方程组

由若干个一元线性同余方程共同构成的方程组就是一元线性同余方程组 (废话)

一般把一元线性同余方程组写成这样:
{ x ≡ a 1 ( m o d m 1 ) x ≡ a 2 ( m o d m 2 ) … … x ≡ a t ( m o d m t ) \left\{ \begin{aligned} &x\equiv a_1\pmod {m_1}\\ &x\equiv a_2\pmod{m_2}\\ &…… \\ &x\equiv a_t\pmod{m_t}\\ \end{aligned} \right. xa1(modm1)xa2(modm2)xat(modmt)

当对于 ∀ 1 ≤ i , j ≤ t . i ̸ = j \forall 1\leq i,j \leq t.i\not=j 1i,jt.i̸=j,都有 g c d ( m i , m j ) = 1 gcd(m_i,m_j)=1 gcd(mi,mj)=1的时候,以上方程恒有解,我们可以直接采用中国剩余定理求解。

3. 中国剩余定理CRT

考虑如果我们能够得到一个数列 { e } \{e\} {e},对于 ∀ 1 ≤ i , j ≤ t , i ̸ = j \forall 1\leq i,j\leq t,i\not=j 1i,jti̸=j,都有

{ e i ≡ 1 ( m o d m i ) e i ≡ 0 ( m o d m j ) \left\{ \begin{aligned} e_i\equiv 1\pmod{m_i}\\ e_i\equiv 0\pmod{m_j} \end{aligned} \right. {ei1(modmi)ei0(modmj)

那么我们就能够很简单的得到答案了,就是

x ≡ ∑ i = 1 t e i a i ( m o d ∏ i = 1 t m i ) x\equiv \sum_{i=1}^te_ia_i\pmod{\prod_{i=1}^tm_i} xi=1teiai(modi=1tmi)

这个正确性是十分显然的,那么我们现在要做的就是构造出一个合法的 { e } \{e\} {e}序列。

M = ∏ i = 1 t m i M=\prod_{i=1}^tm_i M=i=1tmi M i = M m i M_i=\frac{M}{m_i} Mi=miM M i − 1 M i ≡ 1 ( m o d m i ) M_i^{-1}M_i\equiv 1\pmod {m_i} Mi1Mi1(modmi)

则可以直接得到满足条件的 e i ≡ M i − 1 M i ( m o d M ) e_i\equiv M_i^{-1}M_i\pmod M eiMi1Mi(modM)

按照上面写的算一算就行了。

4. 扩展中国剩余定理exCRT

∃ 1 ≤ i , j ≤ t , i ̸ = j \exist 1\leq i,j \leq t,i\not=j 1i,jt,i̸=j,有 g c d ( m i , m j ) ̸ = 1 gcd(m_i,m_j)\not=1 gcd(mi,mj)̸=1的时候,上面的方法不再适用了,我们需要一种更加通用的方法来计算方程组的解。

现在,考虑合并两个方程。

x ≡ a 1 ( m o d m 1 ) x\equiv a_1\pmod {m_1} xa1(modm1)

x ≡ a 2 ( m o d m 2 ) x\equiv a_2\pmod {m_2} xa2(modm2)

现在显然可以设: x = a 1 + y 1 m 1 = a 2 + y 2 m 2 x=a_1+y_1m_1=a_2+y_2m_2 x=a1+y1m1=a2+y2m2

而新的方程显然就是 x ≡ a 1 + y 1 m 1 ≡ a 2 + y 2 m 2 ( m o d l c m ( m 1 , m 2 ) ) x\equiv a_1+y_1m_1\equiv a_2+y_2m_2\pmod{lcm(m_1,m_2)} xa1+y1m1a2+y2m2(modlcm(m1,m2))

显然现在需要解决的方程就是这个:

a 1 − a 2 = y 2 m 2 − y 1 m 1 a_1-a_2=y_2m_2-y_1m_1 a1a2=y2m2y1m1

相信大家都会直接用扩展欧几里得求解,随便解出一个合法的 y 1 , y 2 y_1,y_2 y1,y2代回去就能得到一个新的方程,当上述方程无解时,方程组无解。

两两合并得到的最后一个方程就是答案。


三,原根,n次剩余与离散对数

1.原根

原根:对于正整数 n n n,它的原根是一个满足如下条件的正整数 a a a g c d ( a , n ) = 1 gcd(a,n)=1 gcd(a,n)=1,且 a , a 2 , a 3 . . . a ϕ ( n ) a,a^2,a^3...a^{\phi(n)} a,a2,a3...aϕ(n) % n \%n %n意义下两两不同余。

关于原根的几个结论(以下的 p p p都是指奇质数)

  1. 具有原根的数字只有以下几种形式: 2 , 4 , 2 p n , p n 2,4,2p^n,p^n 2,4,2pn,pn,且原根一定存在。
  2. n n n的最小原根大小是 O ( n 4 ) O(\sqrt[4]n) O(4n )
  3. n n n有原根,则原根个数为 ϕ ( ϕ ( n ) ) \phi(\phi(n)) ϕ(ϕ(n))
  4. g g g p p p的原根,则 g g g g + p g+p g+p p 2 p^2 p2的原根。
  5. 对于 ∀ n ∈ N ∗ \forall n\in N_* nN,若 g g g p n p^n pn的原根,则 g g g g + p n g+p^n g+pn中的奇数是 2 p n 2p^n 2pn的原根。

证明:因为懒得写,咕了。

1.1 找原根

一般来说题目要求的数的原根都不会太大,所以暴力枚举 [ 2 , ⌊ n 4 ⌋ ] [2,\lfloor\sqrt[4]n\rfloor] [2,4n ]就行了。

问题在于怎么check,首先我们有欧拉定理可知: g c d ( a , n ) = 1 ⇒ a ϕ ( n ) ≡ 1 ( m o d n ) gcd(a,n)=1\Rightarrow a^{\phi(n)}\equiv 1\pmod n gcd(a,n)=1aϕ(n)1(modn)

所以循环节长度 s s s必然有 s ∣ ϕ ( n ) s\mid \phi(n) sϕ(n)

所以我们求出 ϕ ( n ) \phi(n) ϕ(n)的唯一分解,枚举所有的 p ∣ ϕ ( n ) p\mid \phi(n) pϕ(n),然后判断 a ϕ ( n ) p ̸ ≡ 1 ( m o d n ) a^{\frac{\phi(n)}{p}}\not\equiv 1\pmod n apϕ(n)̸1(modn),所有 p p p上式都成立则找到一个原根 a a a

1.2 指标

如果 n n n有原根 g g g,且

g r ≡ a ( m o d n ) g^r\equiv a\pmod n gra(modn)

成立,则称 r r r是以 g g g为底的 a a a n n n的一个指标。

记作 r = i n d g a r=ind_ga r=indga

求指标可以用BSGS。

指标有以下性质:

  1. a ≡ b ( m o d p ) ⇔ i n d g a ≡ i n d g b ( m o d ϕ ( n ) ) a\equiv b\pmod p\Leftrightarrow ind_ga\equiv ind_gb\pmod {\phi(n)} ab(modp)indgaindgb(modϕ(n))
  2. i n d g ( a b ) ≡ i n d g ( a ) + i n d g ( b ) ( m o d ϕ ( n ) ) ind_g(ab)\equiv ind_g(a)+ind_g(b)\pmod{\phi(n)} indg(ab)indg(a)+indg(b)(modϕ(n))
  3. i n d g ( a k ) ≡ k ⋅ i n d g ( a ) ( m o d ϕ ( n ) ) ind_g(a^k)\equiv k\cdot ind_g(a)\pmod{\phi(n)} indg(ak)kindg(a)(modϕ(n))

2.离散对数

离散对数问题:求解形如

A x ≡ B ( m o d C ) A^x\equiv B\pmod {C} AxB(modC)

的同余方程。

我们先考虑 g c d ( A , C ) = 1 gcd(A,C)=1 gcd(A,C)=1的情况,显然此时只有当 g c d ( B , C ) = 1 gcd(B,C)=1 gcd(B,C)=1的时候有解。

2.1 BSGS

2.1.1 前置知识:指数模的周期性

A x A^x Ax C C C取模的结果随着 x x x的变化具有周期性,最长周期为 C − 1 C-1 C1

证明:由抽屉原理易证。

所以我们只需要得到 x ∈ [ 0 , C − 1 ] x\in [0,C-1] x[0,C1]的答案就行了。

那么现在怎么解决这个东西。。。(注意解出来不是一个同余等价类啊,就是说 C R T CRT CRT在这里毫无用武之地了)

朴素的枚举显然是 O ( C ) O(C) O(C),考虑优化。

这时候就要用到一种思想Baby-Step,Giant-Step,意味小步大步,简称为BSGS。民间称呼数不胜数:拔山盖世,北上广深,百度搜索谷歌搜索

我们将这 C C C个数分为 n n n组,每组 m = ⌈ C n ⌉ m=\lceil\frac{C}n\rceil m=nC个数。对每一组进行询问,在这组 m m m个数内是否有答案。

这时候答案可以看成是: A i m − y ≡ B ( m o d C ) A^{im-y}\equiv B\pmod C AimyB(modC)

由于 g c d ( A , C ) = 1 gcd(A,C)=1 gcd(A,C)=1,所以 A A A % C \%C %C意义下是存在逆元的,这时候就可以将上面这个方程等价转化为 A i m ≡ A y B ( m o d C ) A^{im}\equiv A^{y}B\pmod C AimAyB(modC)

我们将 y = 1 , 2 , . . . m y=1,2,...m y=1,2,...m的所有 A y B A^yB AyB存到一个哈希表内,然后 O ( n ) O(n) O(n)枚举 i i i计算 A i m A^{im} Aim的值,再到哈希表中查询就可以得到我们的答案了。

总的复杂度 O ( C n ) + O ( n ) O(\frac{C}n)+O(n) O(nC)+O(n),当 n = C n=\sqrt C n=C 的时候取得最小值,此时复杂度为 O ( C ) O(\sqrt C) O(C )

2.2 exBSGS

现在尝试解决当 g c d ( A , C ) ̸ = 1 gcd(A,C)\not=1 gcd(A,C)̸=1时候的离散对数问题。

在已经有了解决 g c d ( A , C ) = 1 gcd(A,C)=1 gcd(A,C)=1的问题的方案的时候,我们考虑将这个问题转化成 g c d ( A , C ) = 1 gcd(A,C)=1 gcd(A,C)=1的情况。

现在将原方程 A x ≡ B ( m o d C ) A^x\equiv B\pmod C AxB(modC)进行一点转化:
A x = B + C y A^x=B+Cy Ax=B+Cy

d 1 = g c d ( A , C ) , C 1 = C d 1 , B 1 = B d 1 d_1=gcd(A,C),C_1=\frac{C}{d_1},B_1=\frac{B}{d_1} d1=gcd(A,C),C1=d1C,B1=d1B,得到等价方程:

A d 1 A x − 1 = B 1 + y C 1 \frac{A}{d_1}A^{x-1}=B_1+yC_1 d1AAx1=B1+yC1

d 2 = g c d ( A , C 1 ) , C 2 = C 1 d 2 , B 2 = B 1 d 2 d_2=gcd(A,C_1),C_2=\frac{C_1}{d_2},B_2=\frac{B_1}{d_2} d2=gcd(A,C1),C2=d2C1,B2=d2B1,得到等价方程:

A 2 d 1 d 2 A x − 2 = B 2 + y C 2 \frac{A^2}{d_1d_2}A^{x-2}=B_2+yC_2 d1d2A2Ax2=B2+yC2

一直处理到 n n n,直到 d n + 1 = 1 d_{n+1}=1 dn+1=1
则我们得到等价方程:

A n ∏ i = 1 n d i A x − n = B n + y C n \frac{A^n}{\prod_{i=1}^nd_i}A^{x-n}=B_n+yC_n i=1ndiAnAxn=Bn+yCn

其中 B n = B ∏ i = 1 n d i , C n = C ∏ i = 1 n d i B_n=\frac{B}{\prod_{i=1}^nd_i},C_n=\frac{C}{\prod_{i=1}^nd_i} Bn=i=1ndiB,Cn=i=1ndiC

如果 B n B_n Bn不是整数肯定就没有解了。

D = A n ∏ i = 1 n d i D=\frac{A^n}{\prod_{i=1}^nd_i} D=i=1ndiAn,显然 g c d ( D , C n ) = 1 , g c d ( A , C n ) = 1 gcd(D,C_n)=1,gcd(A,C_n)=1 gcd(D,Cn)=1,gcd(A,Cn)=1,即 D , A D,A D,A % C n \%C_n %Cn意义下存在逆元。

得到等价方程: D ⋅ A x − n ≡ B n ( m o d C n ) D\cdot A^{x-n}\equiv B_n\pmod{C_n} DAxnBn(modCn),即

A x − n ≡ B n ⋅ D − 1 ( m o d C n ) A^{x-n}\equiv B_n\cdot D^{-1}\pmod {C_n} AxnBnD1(modCn)

现在已经转化成了 g c d ( A , C n ) = 1 gcd(A,C_n)=1 gcd(A,Cn)=1的形式了,直接上普通的BSGS就行了。

注意我们还需要先做一次 O ( log ⁡ C ) O(\log C) O(logC)的枚举(显然 n n n不会超过 O ( log ⁡ C ) O(\log C) O(logC)),因为最后的答案可能没有 n n n大,就是说可能 g c d gcd gcd的影响还没有完全消除,就已经得到 B B B了。

3.n次剩余

n n n次剩余问题:求解形如

x n ≡ a ( m o d m ) x^n\equiv a\pmod m xna(modm)

的同余方程。

利用CRT我们可以把问题分解,设 m m m的唯一分解式为 m = ∏ i = 1 t p i k i m=\prod_{i=1}^tp_i^{k_i} m=i=1tpiki

{ x n ≡ a ( m o d p 1 k 1 ) x n ≡ a ( m o d p 2 k 2 ) … … x n ≡ a ( m o d p t k t ) \left\{ \begin{aligned} &x^n\equiv a\pmod {p_1^{k_1}}\\ &x^n\equiv a\pmod {p_2^{k_2}}\\ &…… \\ &x^n\equiv a\pmod {p_t^{k_t}} \end{aligned} \right. xna(modp1k1)xna(modp2k2)xna(modptkt)

解完这 t t t个方程后用CRT合并回去就行了。

所以接下来只讨论求解 x n ≡ a ( m o d p k ) x^n\equiv a\pmod {p^k} xna(modpk)这样的方程。

3.1 p为奇质数的情况

此时 p k p^k pk的原根一定存在,设这个原根为 g g g

首先我们令 g c d ( a , p k ) = 1 gcd(a,p^k)=1 gcd(a,pk)=1,不然我们就看一看 a a a当中有几个 p p p,两边同时除去,如果总数不是 n n n的倍数,那么原方程无解,否则我们总是可以通过在最后的 x x x中乘上若干个 p p p来得到我们要的解。

首先我们用BSGS解一下这个方程:

g t ≡ a ( m o d p k ) g^t\equiv a\pmod {p^k} gta(modpk)

解出来 t t t之后,我们设 x ≡ g z ( m o d p k ) x\equiv g^z\pmod{p^k} xgz(modpk),则我们得到这个方程:

g z n ≡ g t ( m o d p k ) g^{zn}\equiv g^{t} \pmod {p^k} gzngt(modpk)

所以有 z n ≡ t ( m o d ϕ ( p k ) ) zn\equiv t\pmod{\phi(p^k)} znt(modϕ(pk))

扩欧解一解就行了。

注意,扩欧没有解肯定就只能咕咕咕了。

3.2 p=2的情况

有一个很显然的结论: x n ≡ a ( m o d 2 k ) x^n\equiv a\pmod {2^k} xna(mod2k)的不充分前提是 x n ≡ a ( m o d 2 k − 1 ) x^n\equiv a \pmod{2^{k-1}} xna(mod2k1)

而如果 x n ≡ a ( m o d 2 k − 1 ) x^n\equiv a\pmod{2^{k-1}} xna(mod2k1),则要么 x n ≡ a ( m o d 2 k ) x^n\equiv a\pmod{2^k} xna(mod2k)要么 ( x + 2 k − 1 ) n ≡ a ( m o d 2 k ) (x+2^{k-1})^n\equiv a\pmod{2^{k}} (x+2k1)na(mod2k)

解的总个数不会很多(实测证明这个剪枝跑得飞快),暴力 d f s dfs dfs即可。

4.二次剩余

二次剩余问题:求解形如

x 2 ≡ a ( m o d m ) x^2\equiv a\pmod m x2a(modm)

的同余方程。

首先,还是先分解成 x 2 ≡ a ( m o d p k ) x^2\equiv a\pmod {p^k} x2a(modpk)来处理。

当然可以按照 n n n次剩余的套路来解。

不过我们现在有优秀的 O ( log ⁡ p k ) O(\log p^k) O(logpk)的解法。

4.1 p为奇质数且k=1的情况

现在的方程就是这样的: x 2 ≡ a ( m o d p ) x^2\equiv a\pmod p x2a(modp)

4.1.1 解的存在性

首先考虑一个问题,无解。

为什么会无解?显然 x 2 ≡ ( p − x ) 2 ( m o d p ) x^2\equiv (p-x)^2\pmod p x2(px)2(modp)根据抽屉原理,这样下来总有一些抽屉是空的,这就是无解的情况。

x 2 ≡ a ( m o d p ) x^2\equiv a\pmod p x2a(modp)有解,则称 a a a % p \%p %p意义下的二次剩余类。
否则称 a a a % p \%p %p意义下的二次非剩余类。

我们定义勒让德符号( L e g e n d r e   s y m b o l Legendre\text{ }symbol Legendre symbol):
( a p ) = { 1 a 是 % p 下 的 二 次 剩 余 − 1 a 是 % p 下 的 二 次 非 剩 余 0 a ≡ 0 ( m o d p ) \Big(\frac{a}{p}\Big)=\left\{ \begin{aligned} 1 &&&a是\%p下的二次剩余 \\ -1 &&&a是\%p下的二次非剩余 \\ 0 &&& a\equiv0\pmod p \end{aligned} \right. (pa)=110a%pa%pa0(modp)

我们有欧拉准则: ( a p ) ≡ a p − 1 2 ( m o d p ) (\frac{a}p)\equiv a^{\frac{p-1}2}\pmod p (pa)a2p1(modp)

证明: 首先 p ∣ a p\mid a pa的时候欧拉准则显然成立。

否则由费马小定理我们有 a p − 1 ≡ 1 ( m o d p ) a^{p-1}\equiv 1\pmod p ap11(modp)

所以必然有 a p − 1 2 ≡ ± 1 ( m o d p ) a^{\frac{p-1}{2}}\equiv \pm1\pmod p a2p1±1(modp)

先证明 ( a p ) = 1 (\frac{a}{p})=1 (pa)=1的情况

必要性: a a a % p \%p %p意义下的二次剩余,即 ∃ x , x 2 ≡ a ( m o d p ) \exist x,x^2\equiv a\pmod p x,x2a(modp)

那么我们有

a p − 1 2 ≡ ( x 2 ) p − 1 2 ≡ x p − 1 ≡ 1 ( m o d p ) a^{\frac{p-1}2}\equiv (x^2)^{\frac{p-1}2}\equiv x^{p-1}\equiv 1\pmod p a2p1(x2)2p1xp11(modp)

必要性证明完毕。

充分性: p p p有一个原根 g g g,那么必然有 g i ≡ a ( m o d p ) g^i\equiv a\pmod p gia(modp)

则:

g i ( p − 1 ) 2 ≡ 1 ( m o d   p ) g^{\frac{i(p-1)}2}\equiv 1(mod\text{ }p) g2i(p1)1(mod p)

由于 g g g为原根,所以必然会有 ( p − 1 ) ∣ i ( p − 1 ) 2 (p-1)\mid\frac{i(p-1)}{2} (p1)2i(p1)

i i i是偶数。

必然存在解 x 0 ≡ g i 2 ( m o d p ) x_0\equiv g^{\frac{i}2}\pmod p x0g2i(modp)

充分性证毕。

那么 ( a p ) ≡ − 1 ( m o d p ) (\frac{a}p)\equiv-1\pmod p (pa)1(modp)的情况也就十分显然了。

首先由费马小定理 a p − 1 2 ≡ ± 1 ( m o d p ) a^{\frac{p-1}{2}}\equiv \pm 1\pmod p a2p1±1(modp)

由于前面的欧拉准则在 ( a p ) = 1 (\frac{a}{p})=1 (pa)=1的必要性,二次非剩余的情况下 x 2 ≡ a p − 1 ≡ − 1 ( m o d p ) x^2\equiv a^{p-1}\equiv -1\pmod p x2ap11(modp),显然不可能,违反了费马小定理。

4.1.2 Cipolla算法

以下所有运算均在 % p \%p %p意义下进行

b 2 − a ≡ w ( m o d p ) b^2-a\equiv w\pmod p b2aw(modp),其中 w w w % p \%p %p意义下的二次非剩余

由于 w w w % p \%p %p意义下不存在平方根,类似于虚数设 i = w i=\sqrt w i=w 。类似于复数重新定义 % p \%p %p意义下一个数为 ( a , b ) (a,b) (a,b),即 a + b w a+b\sqrt w a+bw

接下来定义一个代数系统 < G , + , × > <G,+,\times> <G,+,×>满足:

( a , b ) + ( c , d ) = ( a + c , b + d ) (a,b)+(c,d)=(a+c,b+d) (a,b)+(c,d)=(a+c,b+d)

( a , b ) × ( c , d ) = ( a c + b d w , a d + b c ) (a,b)\times (c,d)=(a c+b d w,a d+b c) (a,b)×(c,d)=(ac+bdw,ad+bc)

显然 G G G是一个环,不知道什么是环的自行百度,百度百科

既然有结合律了。就可以快速幂。

那么有结论:上述方程的解为 x = ( b + i ) p + 1 2 x=(b+i)^{\frac{p+1}2} x=(b+i)2p+1

证明如下:

x 2 = ( b + i ) p + 1 = ( b + i ) p ( b + i ) \begin{aligned} x^2 &=(b+i)^{p+1} \\ &=(b+i)^p(b+i) \end{aligned} x2=(b+i)p+1=(b+i)p(b+i)

其中,由二项式定理

( b + i ) p = ∑ k = 0 p C p k b k i p − k (b+i)^p=\sum_{k=0}^pC_p^kb^ki^{p-k} (b+i)p=k=0pCpkbkipk

显然当 k ̸ = 0  or  p k\not= 0\text{ or }p k̸=0 or p C p k ≡ 0 ( m o d p ) C_p^k\equiv 0\pmod p Cpk0(modp)

所以有

( b + i ) p ≡ b p + i p ≡ b p − 1 b + w p − 1 2 i ≡ b − i ( m o d p ) (b+i)^p\equiv b^p+i^p \equiv b^{p-1}b+w^{\frac{p-1}2}i\equiv b-i\pmod p (b+i)pbp+ipbp1b+w2p1ibi(modp)

这个式子的推出同时用到了费马小定理和二次非剩余的特殊性质。

所以可以推出:

x 2 ≡ ( b − i ) ( b + i ) ≡ b 2 − w ≡ a ( m o d p ) x^2\equiv (b-i)(b+i)\equiv b^2-w\equiv a\pmod p x2(bi)(b+i)b2wa(modp)

4.1.3 寻找二次非剩余

由于前文已经叙述了,由于有 t 2 ≡ ( p − t ) 2 ( m o d p ) t^2\equiv (p-t)^2\pmod p t2(pt)2(modp),所以二次剩余的数量不会超过 O ( p 2 ) O(\frac{p}2) O(2p),我们随机出来一个数就有将近 1 / 2 1/2 1/2的概率是二次非剩余,直接随机寻找即可,期望次数为 2 2 2

4.2 p为奇质数且k>1的情况

4.2.1 解的存在性

进行解的存在性判断稍微麻烦了一些

设: a = p c m a=p^cm a=pcm p ∤ m p\nmid m pm

c ≥ k c\ge k ck,直接返回0。

c < k c < k c<k,有解多了一个前提条件: c % 2 = 0 c\%2=0 c%2=0

必要性证明:

设:

x 0 2 ≡ a ( m o d p k ) x_0^2\equiv a\pmod{p^k} x02a(modpk)
x 0 = p t n , n % p ̸ = 0 x_0=p^tn,n\%p\not=0 x0=ptn,n%p̸=0

所以

x 0 2 = p 2 t n 2 x_0^2=p^{2t}n^2 x02=p2tn2

2 t < k 2t < k 2t<k,有如下推论:

( p 2 t s )   %   p k = p 2 t ( s   %   p k − 2 t ) (p^{2t}s)\text{ }\%\text{ }p^k=p^{2t}(s\text{ }\%\text{ }p^{k-2t}) (p2ts) % pk=p2t(s % pk2t)

所以 p 2 t ∣ a p^{2t}|a p2ta,同时我们也可以这样将原方程化为

x 0 2 ≡ a / p c ( m o d p k − c ) x_0^2\equiv a/p^c\pmod {p^{k-c}} x02a/pc(modpkc)

当新方程有解时,原方程也有解,将上面欧拉定则里面推理用的 p − 1 p-1 p1换成 ϕ ( p k − c ) \phi(p^{k-c}) ϕ(pkc)就行了。

最后解为 x = x 0 × p c 2 x=x_0\times p^{\frac{c}2} x=x0×p2c

所以接下来只讨论 p ∤ a p\nmid a pa的情况。

4.2.2 从Cipolla推进

现在求解方程

x 2 ≡ a ( m o d p k ) x^2\equiv a\pmod {p^k} x2a(modpk)

其中 p ∤ a p\nmid a pa

先解出

r 2 ≡ a ( m o d p ) r^2\equiv a\pmod p r2a(modp)

那么有

( r 2 − a ) = k p ⇒ ( r 2 − a ) k ≡ 0 ( m o d p k ) (r^2-a)=kp\Rightarrow (r^2-a)^k\equiv 0\pmod {p^k} (r2a)=kp(r2a)k0(modpk)

( r 2 − a ) k ≡ t 2 − u 2 a ( m o d p ) k (r^2-a)^k\equiv t^2-u^2a\pmod p^k (r2a)kt2u2a(modp)k

我们有

( r − a ) k = t − u a ( r + a ) k = t + u a (r-\sqrt a)^k=t-u\sqrt a \\ (r+\sqrt a)^k=t+u\sqrt a (ra )k=tua (r+a )k=t+ua

这个运算仍然在扩域后进行。(可以证明上式显然是成立的,由二项式定理)

最终我们有

t 2 ≡ u 2 a ( m o d p k ) t^2\equiv u^2a\pmod {p^k} t2u2a(modpk)

解出来的方程就是

t 2 u − 2 ≡ a ( m o d p k ) t^2u^{-2}\equiv a\pmod {p^k} t2u2a(modpk)

显然

g c d ( t , p ) = g c d ( u , p ) = 1 gcd(t,p)=gcd(u,p)=1 gcd(t,p)=gcd(u,p)=1

所以逆元用扩展欧几里得求一下就行了。

4.3 p=2的情况

4.3.1 解的存在性

处理幂的方法与上面这种情况差不多,我们效仿上面先化成

x 2 ≡ a ( m o d 2 k ) , 2 ∤ a x^2\equiv a \pmod{2^k},2\nmid a x2a(mod2k),2a

那么现在呢,没有欧拉准则了啊。

从特殊情况谈起,先打一个表,把那些有解的 a a a找出来

k 有解的a
1 1
2 1
3 1
4 1,9
5 1,9,17,25
6 1,9,17,25,33,41,49,57

似乎当且仅当 a ≡ 1 ( m o d 8 ) a\equiv1\pmod{8} a1(mod8)的时候有解啊。。。

实际上,我们有如下的蕴含关系:

a ≡ 1 ( m o d 8 ) ⇔ ∃ x , x 2 ≡ a ( m o d 2 k ) a\equiv1\pmod{8}\Leftrightarrow \exist x,x^2\equiv a\pmod{2^k} a1(mod8)x,x2a(mod2k)

必要性: 由于存在解 x 0 , x 0 2 ≡ a ( m o d 2 k ) x_0,x_0^2\equiv a\pmod{2^k} x0,x02a(mod2k)

由于 g c d ( a , 2 ) = 1 gcd(a,2)=1 gcd(a,2)=1,所以 g c d ( x 0 , 2 ) = 1 gcd(x_0,2)=1 gcd(x0,2)=1,不妨设 x 0 = 2 t + 1 x_0=2t+1 x0=2t+1

所以

a ≡ x 0 2 ≡ ( 2 t + 1 ) 2 ≡ 4 t ( t + 1 ) + 1 ( m o d 2 k ) a\equiv x_0^2\equiv (2t+1)^2\equiv 4t(t+1)+1\pmod{2^k} ax02(2t+1)24t(t+1)+1(mod2k)

显然 8 ∣ 4 t ( t + 1 ) 8\mid 4t(t+1) 84t(t+1),所以 a ≡ 1 ( m o d 8 ) a\equiv 1\pmod8 a1(mod8)

充分性: 由下面叙述的求解方法易证。也就是说,在能够求出解的情况下,解总是存在 (废话)

4.3.2 找规律+递推

1. k ≤ 2 k\le2 k2
特判。

2. k = 3 k=3 k=3
二次剩余方程 x 2 ≡ a ( m o d 2 3 ) x^2\equiv a\pmod {2^3} x2a(mod23)有解,当且仅当 a ≡ 1 ( m o d 2 3 ) a\equiv 1\pmod{2^3} a1(mod23),且本质不同的解有四个: ± 1 , ± 5 \pm1,\pm5 ±1,±5

换句话说,我们可以将这个解记为 x = ± ( x 3 + t 3 × 2 2 ) , t 3 ∈ Z , x 3 = 1  or  5 x=\pm(x_3+t_3\times 2^2),t_3\in\mathbb Z,x_3=1\text{ or }5 x=±(x3+t3×22),t3Z,x3=1 or 5

3. k > 3 k > 3 k>3

假设我们已经知道方程 x 2 ≡ a ( m o d 2 q − 1 ) x^2\equiv a\pmod{2^{q-1}} x2a(mod2q1)
的解,显然解可以表示成 x q = ± ( x q − 1 + t q − 1 × 2 q − 2 ) , t q − 1 ∈ Z x_q=\pm(x_{q-1}+t_{q-1}\times 2^{q-2}),t_{q-1}\in \mathbb Z xq=±(xq1+tq1×2q2),tq1Z

考虑如何推导出 x q x_q xq t q t_q tq

为了方便,后面记 a i = a % 2 i a_i=a\% 2^i ai=a%2i

对于一个 x 2 ≡ a ( m o d 2 q − 1 ) x^2\equiv a\pmod{2^{q-1}} x2a(mod2q1) x q − 1 x_{q-1} xq1来说,在 % 2 q \%2^q %2q意义下,只可能有:

x q − 1 2 ≡ a q − 1 ( m o d 2 q ) 或 是 x q − 1 2 ≡ a q − 1 + 2 q − 1 ( m o d 2 q ) \begin{aligned} &x_{q-1}^2\equiv a_{q-1} &\pmod{2^q} \\ 或是&x_{q-1}^2\equiv a_{q-1}+2^{q-1}&\pmod{2^q} \end{aligned} xq12aq1xq12aq1+2q1(mod2q)(mod2q)

所以我们就要求出合适的 t q − 1 t_{q-1} tq1的值,先代入方程 x 2 ≡ a ( m o d 2 q ) x^2\equiv a\pmod {2^q} x2a(mod2q)

( x q − 1 + 2 q − 2 × t q − 1 ) 2 ≡ a q ( m o d 2 q ) x q − 1 2 + 2 q − 1 t q − 1 ≡ a q ( m o d 2 q ) t q − 1 ≡ a q − x q − 1 2 2 q − 1 ( m o d 2 ) \begin{aligned} (x_{q-1}+2^{q-2}\times t_{q-1})^2 & \equiv a_q &\pmod{2^q} \\ x_{q-1}^2+2^{q-1}t_{q-1}&\equiv a_q &\pmod{2^q} \\ t_{q-1}& \equiv \frac{a_q-x_{q-1}^2}{2^{q-1}} &\pmod{2} \end{aligned} (xq1+2q2×tq1)2xq12+2q1tq1tq1aqaq2q1aqxq12(mod2q)(mod2q)(mod2)

所以满足要求的 t q − 1 = a q − x q − 1 2 2 q − 1 + 2 × t q , t q ∈ Z t_{q-1}=\frac{a_q-x_{q-1}^2}{2^{q-1}}+2\times t_q,t_q\in \mathbb{Z} tq1=2q1aqxq12+2×tq,tqZ

回到方程 x 2 ≡ a ( m o d 2 q ) x^2\equiv a \pmod{2^q} x2a(mod2q)它的解就是

x = ± ( x q − 1 + a q − x q − 1 2 2 + 2 k − 1 × t k ) , t k ∈ Z x=\pm(x_{q-1}+\frac{a_q-x_{q-1}^2}{2}+2^{k-1}\times t_k),t_k\in\mathbb{Z} x=±(xq1+2aqxq12+2k1×tk),tkZ

q = 3 q=3 q=3的情况开始一路递推即可。

P.S.:本来还想讲三次剩余娱乐一下,结果发现没有题。。。

其实三次剩余比二次剩余要简单,有兴趣的可以自行了解一下。


四,常见积性函数以及性质

几个定义:

  1. 数论函数:定义域为 N + \mathbb{N^+} N+,陪域为复数域的函数。
  2. 积性函数:对于数论函数 f ( n ) f(n) f(n),如果对于 ∀ a , b , ∈ N + , g c d ( a , b ) = 1 \forall a,b,\in \mathbb{N^+},gcd(a,b)=1 a,b,N+,gcd(a,b)=1,都有 f ( a b ) = f ( a ) f ( b ) f(ab)=f(a)f(b) f(ab)=f(a)f(b),则 f ( n ) f(n) f(n)是一个积性函数。
  3. 完全积性函数:对于数论函数 f ( n ) f(n) f(n),如果对于 ∀ a , b , ∈ N + \forall a,b,\in \mathbb{N^+} a,b,N+,都有 f ( a b ) = f ( a ) f ( b ) f(ab)=f(a)f(b) f(ab)=f(a)f(b),则 f ( n ) f(n) f(n)是一个完全积性函数。

证明一个函数是积性函数有显然的好处,能够加速处理出函数值。
当我们需要处理 f ( n ) f(n) f(n)的时候,如果直接求会出现效率问题,求出 n = ∏ i = 1 t p i k i n=\prod_{i=1}^tp_i^{k_i} n=i=1tpiki,则 f ( n ) = ∏ i = 1 t f ( p i k i ) f(n)=\prod_{i=1}^tf(p_i^{k_i}) f(n)=i=1tf(piki)

在接下来的讨论中,所有函数不考虑恒等于 0 0 0的常数函数。

一些记号:

  1. 定义函数的逐点加法和逐点乘法:
    ( f × g ) ( n ) = f ( n ) × g ( n ) (f\times g)(n)=f(n)\times g(n) (f×g)(n)=f(n)×g(n)

( f + g ) ( n ) = f ( n ) + g ( n ) (f+g)(n)=f(n)+g(n) (f+g)(n)=f(n)+g(n)
接下来有一部分可能会因为笔者的sb错误将 × \times × ⋅ \cdot 混用,不过不会引起歧义。
2. [ a ] [a] [a],条件求值表达式,当表达式 a a a为真的时候, [ a ] [a] [a]值为 1 1 1,否则值为 0 0 0

1.Dirichlet卷积

定义两个数论函数的Dirichlet卷积为:

( f ∗ g ) ( n ) = ∑ d ∣ n f ( d ) g ( n d ) (f*g)(n)=\sum_{d\mid n}f(d)g(\frac{n}d) (fg)(n)=dnf(d)g(dn)

Dirichlet卷积的性质:

  1. 交换律: f ∗ g = g ∗ f f*g=g*f fg=gf
  2. 结合律: ( f ∗ g ) ∗ h = f ∗ ( g ∗ h ) (f*g)*h=f*(g*h) (fg)h=f(gh)
  3. 分配率: f ∗ ( g + h ) = f ∗ g + f ∗ h f*(g+h)=f*g+f*h f(g+h)=fg+fh
  4. 单位元: f ∗ ϵ = ϵ ∗ f = f f*\epsilon=\epsilon*f=f fϵ=ϵf=f,其中 ϵ ( n ) = [ n = 1 ] \epsilon(n)=[n=1] ϵ(n)=[n=1],是完全及性函数
  5. 对于两个积性函数 f , g f,g f,g,它们的 D i r i c h l e t Dirichlet Dirichlet卷积也是积性函数

2.常见积性函数

  1. 除数函数: n n n的约数的 k k k次幂之和, σ k ( n ) = ∑ d ∣ n d k \sigma_k(n)=\sum_{d\mid n}d^k σk(n)=dndk
  2. 约数个数函数: n n n的约数个数, d ( n ) = σ 0 ( n ) = ∑ d ∣ n 1 d(n)=\sigma_0(n)=\sum_{d\mid n}1 d(n)=σ0(n)=dn1
  3. 约数和函数: n n n的所有约数之和, σ ( n ) = σ 1 ( n ) = ∑ d ∣ n d \sigma(n)=\sigma_1(n)=\sum_{d\mid n}d σ(n)=σ1(n)=dnd
  4. 欧拉函数: [ 1 , n ] [1,n] [1,n]中与 n n n互质的数的个数, ϕ ( n ) = φ ( n ) = ∑ i = 1 n [ g c d ( i , n ) = 1 ] \phi(n)=\varphi(n)=\sum_{i=1}^n[gcd(i,n)=1] ϕ(n)=φ(n)=i=1n[gcd(i,n)=1]
  5. 莫比乌斯函数:若 n n n有平方因子,则 μ ( n ) = 0 \mu(n)=0 μ(n)=0,否则,假设 n n n k k k个不同的质数相乘得到, μ ( n ) = ( − 1 ) k \mu(n)=(-1)^k μ(n)=(1)k,实际上,莫比乌斯函数的定义式为 ∑ d ∣ n μ ( d ) = [ n = 1 ] \sum_{d\mid n}\mu(d)=[n=1] dnμ(d)=[n=1]
  6. 元函数: ϵ ( n ) = [ n = 1 ] \epsilon(n)=[n=1] ϵ(n)=[n=1],完全积性。
  7. 幂函数: I d k ( n ) = n k Id_k(n)=n^k Idk(n)=nk,完全积性。
  8. 恒等函数: I ( n ) = I d 0 ( n ) = 1 I(n)=Id_0(n)=1 I(n)=Id0(n)=1,完全积性。
  9. 单位函数: I d ( n ) = I d 1 ( n ) = n Id(n)=Id_1(n)=n Id(n)=Id1(n)=n,完全积性。

2.1 一些Dirichlet卷积恒等式

d ( n ) = ∑ d ∣ n 1 , 即 d = I ∗ I σ ( n ) = ∑ d ∣ n d , 即 σ = I ∗ I d ϵ ( n ) = ∑ d ∣ n μ ( d ) , 即 ϵ = μ ∗ I ϕ ( n ) = ∑ d ∣ n μ ( d ) n d , 即 ϕ = μ ∗ I d I d ( n ) = ∑ d ∣ n ϕ ( d ) , 即 I d = ϕ ∗ I \begin{aligned} &d(n)=\sum_{d\mid n}1,&&即d=I*I\\ &\sigma(n)=\sum_{d\mid n}d,&&即\sigma=I*Id\\ &\epsilon(n)=\sum_{d\mid n}\mu(d),&&即\epsilon=\mu*I\\ &\phi(n)=\sum_{d\mid n}\mu(d)\frac{n}d,&&即\phi=\mu*Id\\ &Id(n)=\sum_{d\mid n}\phi(d),&&即Id=\phi*I \end{aligned} d(n)=dn1,σ(n)=dnd,ϵ(n)=dnμ(d),ϕ(n)=dnμ(d)dn,Id(n)=dnϕ(d),d=IIσ=IIdϵ=μIϕ=μIdId=ϕI

在接下来的部分中,将会证明后两个式子(前三个直接由定义得到)。

不过现在先看一个东西: g ( n ) = ∑ d ∣ n f ( d ) g(n)=\sum_{d\mid n}f(d) g(n)=dnf(d),即 g = f ∗ I g=f*I g=fI,我们有结论:如果 g g g是积性函数,则 f f f必然是积性函数(由Dirichlet卷积的性质不难发现 f f f是积性函数的时候 g g g一定是积性函数)。

证明: n = m 1 m 2 , g c d ( m 1 , m 2 ) = 1 n=m_1m_2,gcd(m_1,m_2)=1 n=m1m2gcd(m1,m2)=1

由于 g g g是积性函数,则 g ( m 1 m 2 ) = g ( m 1 ) g ( m 2 ) g(m_1m_2)=g(m_1)g(m_2) g(m1m2)=g(m1)g(m2)

展开左边得到:

g ( m 1 m 2 ) = ∑ d ∣ m 1 m 2 f ( d ) = ∑ d 1 ∣ m 1 ∑ d 2 ∣ m 2 f ( d 1 d 2 ) g(m_1m_2)=\sum_{d\mid m_1m_2}f(d)=\sum_{d_1\mid m_1}\sum_{d_2\mid m_2}f(d_1d_2) g(m1m2)=dm1m2f(d)=d1m1d2m2f(d1d2)

展开右边得到:

g ( m 1 ) g ( m 2 ) = ∑ d 1 ∣ m 1 ∑ d 2 ∣ m 2 f ( d 1 ) f ( d 2 ) g(m_1)g(m_2)=\sum_{d_1\mid m_1}\sum_{d_2\mid m_2}f(d_1)f(d_2) g(m1)g(m2)=d1m1d2m2f(d1)f(d2)

所以得到:

∑ d 1 ∣ m 1 ∑ d 2 ∣ m 2 f ( d 1 d 2 ) = ∑ d 1 ∣ m 1 ∑ d 2 ∣ m 2 f ( d 1 ) f ( d 2 ) \sum_{d_1\mid m_1}\sum_{d_2\mid m_2}f(d_1d_2)=\sum_{d_1\mid m_1}\sum_{d_2\mid m_2}f(d_1)f(d_2) d1m1d2m2f(d1d2)=d1m1d2m2f(d1)f(d2)

由恒等式的性质可以得到 f ( d 1 d 2 ) = f ( d 1 ) f ( d 2 ) f(d_1d_2)=f(d_1)f(d_2) f(d1d2)=f(d

你可能感兴趣的:(_____数学_____,BSGS,二次剩余Cipolla,Lucas定理,扩展欧几里得,中国剩余定理CRT,莫比乌斯反演,筛法,素数测试,分解质因数)