积性函数与完全积性函数
e ( n ) = [ n = 1 ] e ( n ) = [ n = 1 ]
I ( n ) = 1 I ( n ) = 1
i d ( n ) = n i d ( n ) = n
迪利克雷卷积
记 h = f ∗ g h = f ∗ g 表示 f , g f , g 的迪利克雷卷积为 h h
h ( n ) = ∑ d | n f ( d ) g ( n d ) h ( n ) = ∑ d | n f ( d ) g ( n d )
迪利克雷卷积有交换律、结合律、分配律:
f ∗ g = g ∗ f ( f ∗ g ) ∗ h = f ∗ ( g ∗ h ) f ∗ ( g + h ) = f ∗ g + f ∗ h f ∗ g = g ∗ f ( f ∗ g ) ∗ h = f ∗ ( g ∗ h ) f ∗ ( g + h ) = f ∗ g + f ∗ h
性质:
若 f , g f , g 均为积性函数,则 f ∗ g f ∗ g 也是积性函数:暴力拆开证明
莫比乌斯反演
定义:
μ ( n ) = ⎧ ⎪ ⎨ ⎪ ⎩ 0 ( 若 n 含 有 平 方 因 子 ) − 1 ( 若 n 有 奇 数 个 质 因 子 ) 1 ( 若 n 有 偶 数 个 质 因 子 或 n = 1 ) μ ( n ) = { 0 ( 若 n 含 有 平 方 因 子 ) − 1 ( 若 n 有 奇 数 个 质 因 子 ) 1 ( 若 n 有 偶 数 个 质 因 子 或 n = 1 )
性质:
μ μ 是一个积性函数:暴力唯一分解
μ ∗ I = e μ ∗ I = e 即 ∑ d | n μ ( d ) = [ n = 1 ] ∑ d | n μ ( d ) = [ n = 1 ]
f ∗ I = g ⟺ f = μ ∗ g f ∗ I = g ⟺ f = μ ∗ g 即 ∑ d | n f ( d ) = g ( n ) , ∑ d | n g ( d ) μ ( n d ) = f ( n ) ∑ d | n f ( d ) = g ( n ) , ∑ d | n g ( d ) μ ( n d ) = f ( n ) 注意:不要求 f , g f , g 为积性函数
∑ n | d f ( d ) = g ( n ) , f ( n ) = ∑ n | d g ( d ) μ ( d n ) ∑ n | d f ( d ) = g ( n ) , f ( n ) = ∑ n | d g ( d ) μ ( d n )
欧拉函数
性质:
积性函数
φ ∗ I = i d φ ∗ I = i d 即 ∑ d | n φ ( d ) = n ∑ d | n φ ( d ) = n
整除分块
⌊ n i ⌋ ⌊ n i ⌋ 有 √ n n 种取值:分类讨论
部分证明(自己写的不严谨)
(1)若 f , g f , g 为积性函数,则 f ∗ g f ∗ g 也为积性函数
设 f ∗ g = h f ∗ g = h ,设 ( a , b ) = 1 ( a , b ) = 1 ,那么就有:
h ( a b ) = ∑ d | a b f ( d ) g ( a b d ) h ( a b ) = ∑ d | a b f ( d ) g ( a b d )
设 d = d 1 d 2 d = d 1 d 2 且 ( d 1 , d 2 ) = 1 ( d 1 , d 2 ) = 1 ,则
h ( a b ) = ∑ d 1 | a , d 2 | b f ( d 1 d 2 ) g ( a d 1 b d 2 ) = ( ∑ d 1 | a f ( d 1 ) g ( a d 1 ) ) × ( ∑ d 2 | b f ( d 2 ) g ( b d 2 ) ) = h ( a ) h ( b ) h ( a b ) = ∑ d 1 | a , d 2 | b f ( d 1 d 2 ) g ( a d 1 b d 2 ) = ( ∑ d 1 | a f ( d 1 ) g ( a d 1 ) ) × ( ∑ d 2 | b f ( d 2 ) g ( b d 2 ) ) = h ( a ) h ( b )
(2)μ μ 是一个积性函数:
1 1 时显然成立
设 μ ( a b ) μ ( a b ) 且 ( a , b ) = 1 ( a , b ) = 1 ,因为 ( a , b ) 1 ( a , b ) 1 所以 a , b a , b 不含有除 1 1 外的公因数,所以当 a a 不含有平方因子且 b b 不含有平方因子的时候 a b a b 也不含有平方因子。而剩余情况就相当于一个奇偶的乘也显然可以满足条件。
(3)μ ∗ I = e μ ∗ I = e
显然当 n = 1 n = 1 时成立,考虑 n ≠ 1 n ≠ 1 时。
e ( n ) = ∑ d | n μ ( d ) e ( n ) = ∑ d | n μ ( d )
我们只需证明 μ μ 中 1 1 与 − 1 − 1 成对出现,那么即可证明。我们设 p p 为 n n 的最小质因子,对于含有 p p 为因子的 d d 我们就将 p p 除掉,显然 μ ( d ) + μ ( d p ) = 0 μ ( d ) + μ ( d p ) = 0 。对于不含有 p p 为因子的 d d 我们将 p p 乘上,显然 μ ( d ) + μ ( d p ) = 0 μ ( d ) + μ ( d p ) = 0 ,因为 d , p d , p 是 n n 的约数所以若 d d 中不含有 p p 那么将 d d 乘以 p p 也不会超过 n n 的范围。
(4)f ∗ I = g ⟺ g ∗ μ = f f ∗ I = g ⟺ g ∗ μ = f
将第一个式子两边同时卷 μ μ ,得:
f ∗ I ∗ μ = g ∗ μ f ∗ I ∗ μ = g ∗ μ
因为迪利克雷卷积具有结合律所以:
f ∗ ( I ∗ μ ) = g ∗ μ f ∗ e = g ∗ μ f ∗ ( I ∗ μ ) = g ∗ μ f ∗ e = g ∗ μ
下面只需证明 f ∗ e = f f ∗ e = f 即可,暴力展开一下:
f ( n ) = ∑ d | n f ( d ) e ( n d ) f ( n ) = ∑ d | n f ( d ) e ( n d )
当 n d = 1 n d = 1 时式子有值,其余情况均为 0 0 ,此时 d = n d = n 即 f ( n ) = f ( n ) f ( n ) = f ( n ) 也就是 f ∗ e = f f ∗ e = f
所以可以得出:
f ∗ I = g → g ∗ μ = f f ∗ I = g → g ∗ μ = f
同理反过来即两边同乘 I I ,也可以得出。
(5)φ ∗ I = i d φ ∗ I = i d
根据 φ φ 的基本定义:
φ ( n ) = n ∑ i = 1 [ ( i , n ) = 1 ] φ ( n ) = ∑ i = 1 n [ ( i , n ) = 1 ]
来一波莫反:
φ ( n ) = n ∑ i = 1 ∑ d | i , d | n μ ( d ) = ∑ d | n μ ( d ) n d φ ( n ) = ∑ i = 1 n ∑ d | i , d | n μ ( d ) = ∑ d | n μ ( d ) n d
就是把 d | i d | i 给加到了 i i 的上面,对于每一个 d d 判断有多少个 i i 满足条件。
这样我们也就证明了 μ ∗ i d = φ μ ∗ i d = φ ,根据(4),则可以推出 φ ∗ I = i d φ ∗ I = i d
题解
A - 公约数的和
这种题就是推式子:(为了防止初学很懵,就写了超多的文字描述)
1.考虑原式的各种限制条件给他改一改
n ∑ i = 1 n ∑ j = i + 1 gcd ( i , j ) = ∑ n i = 1 ∑ n j = 1 gcd ( i , j ) − ∑ n i = 1 gcd ( i , i ) 2 ∑ i = 1 n ∑ j = i + 1 n gcd ( i , j ) = ∑ i = 1 n ∑ j = 1 n gcd ( i , j ) − ∑ i = 1 n gcd ( i , i ) 2
2.也就是相当于数据范围增大然后去掉 i = j i = j 的情况。现在问题就转化为了化简左上角这一坨。
n ∑ i = 1 n ∑ j = 1 gcd ( i , j ) = n ∑ d = 1 d n ∑ i = 1 n ∑ j = 1 [ gcd ( i , j ) = d ] ∑ i = 1 n ∑ j = 1 n gcd ( i , j ) = ∑ d = 1 n d ∑ i = 1 n ∑ j = 1 n [ gcd ( i , j ) = d ]
3.[ A ] [ A ] 代表若 A A 满足则为 1 1 ,否则为 0 0 ,d d 的范围是因为要使得 gcd = d gcd = d 则 d d 只能是这些取值,继续套路化简:
n ∑ d = 1 d n ∑ i = 1 n ∑ j = 1 [ gcd ( i , j ) = d ] = n ∑ d = 1 d ⌊ n d ⌋ ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 [ gcd ( i , j ) = 1 ] ∑ d = 1 n d ∑ i = 1 n ∑ j = 1 n [ gcd ( i , j ) = d ] = ∑ d = 1 n d ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ n d ⌋ [ gcd ( i , j ) = 1 ]
4.我们其实就是相当于将枚举 i , j i , j 变成了枚举 i d , j d i d , j d ,很显然原式的值并不会变。下面就是非常的套路了:
n ∑ d = 1 d ⌊ n d ⌋ ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 [ gcd ( i , j ) = 1 ] = n ∑ d = 1 d ⌊ n d ⌋ ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ∑ k | i , k | j μ ( k ) ∑ d = 1 n d ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ n d ⌋ [ gcd ( i , j ) = 1 ] = ∑ d = 1 n d ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ n d ⌋ ∑ k | i , k | j μ ( k )
5.这里就是 μ μ 的性质,但是将 k | gcd ( i , j ) k | gcd ( i , j ) 变成 k | i , k | j k | i , k | j ,证明见下面。继续化简:
n ∑ d = 1 d ⌊ n d ⌋ ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ∑ k | i , k | j μ ( k ) = n ∑ d = 1 d n ∑ k = 1 μ ( k ) ⌊ n d k ⌋ ∑ i = 1 ⌊ n d k ⌋ ∑ j = 1 1 ∑ d = 1 n d ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ n d ⌋ ∑ k | i , k | j μ ( k ) = ∑ d = 1 n d ∑ k = 1 n μ ( k ) ∑ i = 1 ⌊ n d k ⌋ ∑ j = 1 ⌊ n d k ⌋ 1
6.这里也就是将枚举 k k 提前,并且将 i d , j d i d , j d 变成 i d k , j d k i d k , j d k ,这样就可以继续化简:
n ∑ d = 1 d n ∑ k = 1 μ ( k ) ⌊ n d k ⌋ ∑ i = 1 ⌊ n d k ⌋ ∑ j = 1 1 = n ∑ d = 1 d n ∑ k = 1 μ ( k ) ⌊ n d k ⌋ 2 ∑ d = 1 n d ∑ k = 1 n μ ( k ) ∑ i = 1 ⌊ n d k ⌋ ∑ j = 1 ⌊ n d k ⌋ 1 = ∑ d = 1 n d ∑ k = 1 n μ ( k ) ⌊ n d k ⌋ 2
7.我们考虑设 T = d k T = d k ,然后化简就有:
n ∑ d = 1 d n ∑ k = 1 μ ( k ) ⌊ n d k ⌋ 2 = n ∑ T = 1 ⌊ n T ⌋ 2 ∑ d | T d μ ( T d ) ∑ d = 1 n d ∑ k = 1 n μ ( k ) ⌊ n d k ⌋ 2 = ∑ T = 1 n ⌊ n T ⌋ 2 ∑ d | T d μ ( T d )
8.最后面的这一坨也就是 μ ∗ i d = φ μ ∗ i d = φ ,所以最终可以化简为:
n ∑ T = 1 ⌊ n T ⌋ 2 ∑ d | T d μ ( T d ) = n ∑ T ⌊ n T ⌋ 2 φ ( T ) ∑ T = 1 n ⌊ n T ⌋ 2 ∑ d | T d μ ( T d ) = ∑ T n ⌊ n T ⌋ 2 φ ( T )
下面求解就直接上一个数论分块再预处理一下 φ φ 的前缀和就好了。
说明(证明):简记 gcd ( i , j ) = ( i , j ) gcd ( i , j ) = ( i , j )
3.d d 的范围:因为 d d 就是我们枚举的 ( i , j ) ( i , j ) ,显然这个东西的范围就是 [ 1 , n ] [ 1 , n ]
5.k k 的范围:观察我们的后面,我们的目的是为了让 ⌊ n d k ⌋ > 0 ⌊ n d k ⌋ > 0 那么也就是 k k 的范围就是 [ 1 , n ] [ 1 , n ]
5.k | ( i , j ) ⟺ k | i , k | j k | ( i , j ) ⟺ k | i , k | j :(暂时鸽了)
7.注意到一点我们只有 d k ≤ n d k ≤ n 时我们的式子才有值,所以我们就枚举 T ∈ [ 1 , n ] T ∈ [ 1 , n ] ,那么能使得这个成立的 d , k d , k ,显然就是我们枚举一个 d | T d | T 然后 k k 也就是 T d T d
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律