和式的变换

本文详细介绍了和式变换的几个基本规则,包括交换律、结合律和分配律,并展示了如何通过艾弗森括号和改变求和次序来简化和式。此外,还讨论了如何通过替换指标变量和改变枚举范围来优化求和表达式,以及和式变换在处理组合数和相关问题中的应用。这些技巧在解决数学和编程问题中非常实用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

和式的变换

和式的变换规则

容易证明,和式的变换符合如下规则:

1.交换律

例如: ∑ i ∈ k a i = ∑ i ∈ p ( k ) a i \overset{}{\underset{i \in k}{\sum}}a_i=\overset{}{\underset{i \in p(k)}{\sum}}a_i ikai=ip(k)ai
p ( k ) p(k) p(k)是指标集k的一个排列。
例如: a 1 + a 2 + a 3 + a 4 = a 2 + a 1 + a 3 + a 4 a_1+a_2+a_3+a_4=a_2+a_1+a_3+a_4 a1+a2+a3+a4=a2+a1+a3+a4

2.结合律

例如: ∑ i = 1 n a i + ∑ i = 1 n b i = ∑ i = 1 n a i + b i \overset{n}{\underset{i=1}{\sum}}a_i+\overset{n}{\underset{i=1}{\sum}}b_i=\overset{n}{\underset{i=1}{\sum}}a_i+b_i i=1nai+i=1nbi=i=1nai+bi

3.分配律

例如: ∑ i c ⋅ a i = c ⋅ ∑ i a i \overset{}{\underset{i}{\sum}}c\cdot a_i=c \cdot \overset{}{\underset{i}{\sum}}a_i icai=ciai

和式的变换技术

n ≤ m n\leq m nm

1.替换条件式

∑ d ∣ g c d ( i , j ) f ( d ) = ∑ d = 1 min ⁡ ( i , j ) [ d ∣ i ] [ d ∣ j ] f ( d ) \overset{}{\underset{d|gcd(i,j)}{\sum}}f(d)=\overset{\min(i,j)}{\underset{d=1}{\sum}}[d|i][d|j]f(d) dgcd(i,j)f(d)=d=1min(i,j)[di][dj]f(d)
把写在求和符号下标位置的命题改为艾弗森括号的形式,使得命题可以随意变换位置,是一种常见的技巧。
把枚举次序复杂的求和式改为顺序求和式,便于处理(如通过前缀和预处理),也是一种常见的技巧。

2.替换指标变量

∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = k ] = ∑ i k = 1 n ∑ j k = 1 m [ g c d ( i k , j k ) = k ] = ∑ i k = 1 n ∑ j k = 1 m [ g c d ( i , j ) = 1 ] \overset{n}{\underset{i=1}{\sum}}\overset{m}{\underset{j=1}{\sum}}[gcd(i,j)=k]=\overset{n}{\underset{ik=1}{\sum}}\overset{m}{\underset{jk=1}{\sum}}[gcd(ik,jk)=k]=\overset{n}{\underset{ik=1}{\sum}}\overset{m}{\underset{jk=1}{\sum}}[gcd(i,j)=1] i=1nj=1m[gcd(i,j)=k]=ik=1njk=1m[gcd(ik,jk)=k]=ik=1njk=1m[gcd(i,j)=1]

∑ i = 0 n ( − 1 ) n − i f ( n − i ) = ∑ i = 0 n ( − 1 ) i f ( i ) \overset{n}{\underset{i=0}{\sum}}(-1)^{n-i}f(n-i)=\overset{n}{\underset{i=0}{\sum}}(-1)^if(i) i=0n(1)nif(ni)=i=0n(1)if(i)

3.改变求和次序

∑ i ∑ j f ( i ) g ( j ) = ∑ j ∑ i f ( i ) g ( j ) \overset{}{\underset{i}{\sum}}\overset{}{\underset{j}{\sum}}f(i)g(j)=\overset{}{\underset{j}{\sum}}\overset{}{\underset{i}{\sum}}f(i)g(j) ijf(i)g(j)=jif(i)g(j)

复杂的改变求和次序

为了改变求和次序,有时候我们可能需要通过解不等式的方法。

例如:
∑ i = 1 n ∑ j = 1 i f ( i , j ) \overset{n}{\underset{i=1}{\sum}}\overset{i}{\underset{j=1}{\sum}}f(i,j) i=1nj=1if(i,j)
= ∑ i ∑ j f ( i , j ) [ 1 ≤ i ] [ i ≤ n ] [ 1 ≤ j ] [ j ≤ i ] =\textcolor{red}{\overset{}{\underset{i}{\sum}}}\textcolor{blue}{\overset{}{\underset{j}{\sum}}}f(i,j)\textcolor{red}{[1\leq i][i\leq n]}\textcolor{blue}{[1\leq j][j\leq i]} =ijf(i,j)[1i][in][1j][ji]

我们知道 j ≤ i ≤ n j\leq i\leq n jin

= ∑ i ∑ j f ( i , j ) [ j ≤ i ] [ i ≤ n ] [ 1 ≤ j ] [ j ≤ n ] =\textcolor{red}{\overset{}{\underset{i}{\sum}}}\textcolor{blue}{\overset{}{\underset{j}{\sum}}}f(i,j)\textcolor{red}{[j\leq i][i\leq n]}\textcolor{blue}{[1\leq j][j\leq n]} =ijf(i,j)[ji][in][1j][jn]
= ∑ j ∑ i f ( i , j ) [ j ≤ i ] [ i ≤ n ] [ 1 ≤ j ] [ j ≤ n ] =\textcolor{blue}{\overset{}{\underset{j}{\sum}}}\textcolor{red}{\overset{}{\underset{i}{\sum}}}f(i,j)\textcolor{red}{[j\leq i][i\leq n]}\textcolor{blue}{[1\leq j][j\leq n]} =jif(i,j)[ji][in][1j][jn]

= ∑ j = 1 n ∑ i = j n f ( i , j ) =\overset{n}{\underset{j=1}{\sum}}\overset{n}{\underset{i=j}{\sum}}f(i,j) =j=1ni=jnf(i,j)

又例如:
∑ i = 1 n ∑ j = i + 1 n f ( i , j ) \overset{n}{\underset{i=1}{\sum}}\overset{n}{\underset{j=i+1}{\sum}}f(i,j) i=1nj=i+1nf(i,j)
= ∑ i ∑ j f ( i , j ) [ 1 ≤ i ] [ i ≤ n ] [ i + 1 ≤ j ] [ j ≤ n ] =\overset{}{\underset{i}{\sum}}\overset{}{\underset{j}{\sum}}f(i,j)[1\leq i][i\leq n][i+1\leq j][j\leq n] =ijf(i,j)[1i][in][i+1j][jn]

因此 j j j的枚举下界是 j ≥ i + 1 ≥ 2 j\geq i+1\geq 2 ji+12,而我们解第三个不等式可以知道 i ≤ j − 1 i\leq j-1 ij1
即:
{ 1 ≤ i                i ≤ j − 1 i ≤ n              2 ≤ j              j ≤ n              \left\{\begin{matrix} 1\leq i\;\;\;\;\;\;\;\\ i\leq j-1\\ i\leq n\;\;\;\;\;\;\\ 2\leq j\;\;\;\;\;\;\\ j\leq n\;\;\;\;\;\; \end{matrix}\right. 1iij1in2jjn
对答案取交集,则:
= ∑ i ∑ j f ( i , j ) [ 1 ≤ i ] [ i ≤ j − 1 ] [ 2 ≤ j ] [ j ≤ n ] =\overset{}{\underset{i}{\sum}}\overset{}{\underset{j}{\sum}}f(i,j)[1\leq i][i\leq j-1][2\leq j][j\leq n] =ijf(i,j)[1i][ij1][2j][jn]
= ∑ j ∑ i f ( i , j ) [ 1 ≤ i ] [ i ≤ j − 1 ] [ 2 ≤ j ] [ j ≤ n ] =\overset{}{\underset{j}{\sum}}\overset{}{\underset{i}{\sum}}f(i,j)[1\leq i][i\leq j-1][2\leq j][j\leq n] =jif(i,j)[1i][ij1][2j][jn]
= ∑ j = 2 n ∑ i = 1 j − 1 f ( i , j ) =\overset{n}{\underset{j=2}{\sum}}\overset{j-1}{\underset{i=1}{\sum}}f(i,j) =j=2ni=1j1f(i,j)

4.分离变量

∑ i ∑ i f ( i ) g ( j ) = ∑ i f ( i ) ∑ j g ( j ) \overset{}{\underset{i}{\sum}}\overset{}{\underset{i}{\sum}}f(i)g(j)=\overset{}{\underset{i}{\sum}}f(i)\overset{}{\underset{j}{\sum}}g(j) iif(i)g(j)=if(i)jg(j)

5.改变枚举范围

扩大枚举范围

∑ i = 1 n ∑ j = 1 m ∑ d ∣ g c d ( i , j ) f ( d ) = ∑ i = 1 n ∑ j = 1 m ∑ d = 1 min ⁡ ( i , j ) [ d ∣ i ] [ d ∣ j ] f ( d ) \overset{n}{\underset{i=1}{\sum}}\overset{m}{\underset{j=1}{\sum}}\overset{}{\underset{d|gcd(i,j)}{\sum}}f(d)=\overset{n}{\underset{i=1}{\sum}}\overset{m}{\underset{j=1}{\sum}}\overset{\min(i,j)}{\underset{d=1}{\sum}}[d|i][d|j]f(d) i=1nj=1mdgcd(i,j)f(d)=i=1nj=1md=1min(i,j)[di][dj]f(d)

我们注意到,如果 d > i d>i d>i,则 [ d ∣ i ] [d|i] [di]必定为0,因此最后一个求和符号的枚举上界可以改变:

∑ i = 1 n ∑ j = 1 m ∑ d = 1 min ⁡ ( i , j ) [ d ∣ i ] [ d ∣ j ] f ( d ) = ∑ i = 1 n ∑ j = 1 m ∑ d = 1 n [ d ∣ i ] [ d ∣ j ] f ( d ) \overset{n}{\underset{i=1}{\sum}}\overset{m}{\underset{j=1}{\sum}}\overset{\min(i,j)}{\underset{d=1}{\sum}}[d|i][d|j]f(d)=\overset{n}{\underset{i=1}{\sum}}\overset{m}{\underset{j=1}{\sum}}\overset{n}{\underset{d=1}{\sum}}[d|i][d|j]f(d) i=1nj=1md=1min(i,j)[di][dj]f(d)=i=1nj=1md=1n[di][dj]f(d)

扩大范围可以将于变量有关的枚举上界改变为常量,便于进行处理,是一个常见技巧。

这是由于我们注意到,一些变量的枚举范围被重复限制了多次,这是没有必要的,只需要让变量的枚举范围被限制一次就好了。

缩小枚举范围

∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = k ] = ∑ i k = 1 n ∑ j k = 1 m [ g c d ( i k , j k ) = k ] = ∑ i k = 1 n ∑ j k = 1 m [ g c d ( i , j ) = 1 ] = ∑ i = 1 ⌊ n k ⌋ ∑ j = 1 ⌊ m k ⌋ [ g c d ( i , j ) = 1 ] \overset{n}{\underset{i=1}{\sum}}\overset{m}{\underset{j=1}{\sum}}[gcd(i,j)=k]=\overset{n}{\underset{ik=1}{\sum}}\overset{m}{\underset{jk=1}{\sum}}[gcd(ik,jk)=k]=\overset{n}{\underset{ik=1}{\sum}}\overset{m}{\underset{jk=1}{\sum}}[gcd(i,j)=1]=\overset{\lfloor\frac n k \rfloor}{\underset{i=1}{\sum}}\overset{\lfloor\frac m k\rfloor }{\underset{j=1}{\sum}}[gcd(i,j)=1] i=1nj=1m[gcd(i,j)=k]=ik=1njk=1m[gcd(ik,jk)=k]=ik=1njk=1m[gcd(i,j)=1]=i=1knj=1km[gcd(i,j)=1]
在最后一步,我们缩小了枚举范围,对于i来说,事实上是:
1 ≤ i k ≤ n 1\leq ik\leq n 1ikn 就是 ⌊ 1 k ⌋ ≤ i ≤ ⌊ n k ⌋ \lfloor\frac 1 k \rfloor\leq i\leq\lfloor\frac n k\rfloor k1ikn,由于i要取整,因此: 1 ≤ i ≤ ⌊ n k ⌋ 1\leq i\leq\lfloor\frac n k\rfloor 1ikn

缩小枚举范围使得枚举条件简化,也是一个常见技巧。

示例

设组合数 ( j i ) (^i_j) (ji)表示从i个不同的物品中取出j个,不考虑取出的顺序,有多少种情况数。
显然 ( j i ) = 0 ( j > i 或 j < 0 或 i < 0 ) (^i_j)=0(j>i或j<0或i<0) (ji)=0(j>ij<0i<0)

则有:
∑ i = 0 n − 1 (      i n − 1 ) n i + 1 + ∑ i = 0 n − 1 (      i n − 1 ) n i \overset{n-1}{\underset{i=0}{\sum}}(^{n-1}_{\;\;i})n^{i+1}+\overset{n-1}{\underset{i=0}{\sum}}(^{n-1}_{\;\;i})n^{i} i=0n1(in1)ni+1+i=0n1(in1)ni

首先注意到 n − 1 n-1 n1作为上标不太好,考虑到 (      n n − 1 ) = 0 (_{\;\;n}^{n-1})=0 (nn1)=0
= ∑ i = 0 n (      i n − 1 ) n i + 1 + ∑ i = 0 n (      i n − 1 ) n i =\overset{n}{\underset{i=0}{\sum}}(^{n-1}_{\;\;i})n^{i+1}+\overset{n}{\underset{i=0}{\sum}}(^{n-1}_{\;\;i})n^{i} =i=0n(in1)ni+1+i=0n(in1)ni

接下来发现 n i + 1 n^{i+1} ni+1 n i n^i ni不太好合并,由于 ( − 1 n − 1 ) = 0 (^{n-1}_{-1})=0 (1n1)=0,可以把左和式的i全部换成i-1,此时发现枚举上界不变:
= ∑ i = 0 n ( i − 1 n − 1 ) n i + ∑ i = 0 n (      i n − 1 ) n i = ∑ i = 0 n ( ( i − 1 n − 1 ) + (      i n − 1 ) ) n i =\overset{n}{\underset{i=0}{\sum}}(^{n-1}_{i-1})n^{i}+\overset{n}{\underset{i=0}{\sum}}(^{n-1}_{\;\;i})n^{i}=\overset{n}{\underset{i=0}{\sum}}\left((^{n-1}_{i-1})+(^{n-1}_{\;\;i})\right)n^{i} =i=0n(i1n1)ni+i=0n(in1)ni=i=0n((i1n1)+(in1))ni

和式的变换公式

容易证明:

公式1

( ∑ i = 1 n a i ) 2 = ∑ i = 1 n a i 2 + 2 ∑ 1 ≤ i < j ≤ n a i a j \left(\overset{n}{\underset{i=1}{\sum}}a_i\right)^2=\overset{n}{\underset{i=1}{\sum}}a_i^2+2\overset{}{\underset{1\leq i <j \leq n}{\sum}}a_ia_j (i=1nai)2=i=1nai2+21i<jnaiaj
这个式子似乎没什么用。

公式2

∑ 1 ≤ i < j ≤ n ( a i − a j ) 2 = n ∑ i = 1 n a i 2 − ( ∑ i = 1 n a i ) 2 \overset{}{\underset{1\leq i<j\leq n}{\sum}}(a_i-a_j)^2=n\overset{n}{\underset{i=1}{\sum}}a_i^2-\left(\overset{n}{\underset{i=1}{\sum}}a_i\right)^2 1i<jn(aiaj)2=ni=1nai2(i=1nai)2
这个公式也显得很鸡肋,因为其实优化不了时间复杂度,直接把上面的式子拆开,然后前缀和优化一波也能O(n)做。

证明也很容易:
∑ 1 ≤ i < j ≤ n ( a i − a j ) 2 = ∑ 1 ≤ i < j ≤ n a i 2 + a j 2 − 2 a i a j \overset{}{\underset{1\leq i<j\leq n}{\sum}}(a_i-a_j)^2=\overset{}{\underset{1\leq i<j\leq n}{\sum}}a_i^2+a_j^2-2a_ia_j 1i<jn(aiaj)2=1i<jnai2+aj22aiaj

尽量让一个和式只声明一个变量,可以把和式拆开:
= ∑ i = 1 n ∑    1 ≤ j < i a i 2 + a j 2 − 2 a i a j =\overset{n}{\underset{i=1}{\sum}}\overset{}{\underset{\;1\leq j <i}{\sum}}a_i^2+a_j^2-2a_ia_j =i=1n1j<iai2+aj22aiaj
= ∑ i = 1 n ∑    1 ≤ j < i a i 2 + ∑ i = 1 n ∑    1 ≤ j < i a j 2 − 2 ∑ i = 1 n ∑    1 ≤ j < i a i ⋅ a j =\overset{n}{\underset{i=1}{\sum}}\overset{}{\underset{\;1\leq j <i}{\sum}}a_i^2+\overset{n}{\underset{i=1}{\sum}}\overset{}{\underset{\;1\leq j <i}{\sum}}a_j^2-2\overset{n}{\underset{i=1}{\sum}}\overset{}{\underset{\;1\leq j <i}{\sum}}a_i\cdot a_j =i=1n1j<iai2+i=1n1j<iaj22i=1n1j<iaiaj

发现第三个式子可以套进第一个公式里:
= ∑ i = 1 n ∑    1 ≤ j < i a i 2 + ∑ i = 1 n ∑    1 ≤ j < i a j 2 + ∑ i = 1 n a i 2 − ( ∑ i = 1 n a i ) 2 =\overset{n}{\underset{i=1}{\sum}}\overset{}{\underset{\;1\leq j <i}{\sum}}a_i^2+\overset{n}{\underset{i=1}{\sum}}\overset{}{\underset{\;1\leq j <i}{\sum}}a_j^2+\overset{n}{\underset{i=1}{\sum}}a_i^2-\left(\overset{n}{\underset{i=1}{\sum}}a_i\right)^2 =i=1n1j<iai2+i=1n1j<iaj2+i=1nai2(i=1nai)2

然后我们发现,前面三项都是一个基于 a i 2 a_i^2 ai2的贡献.
第一项对答案的贡献是 ∑ { 0 ⋅ a 1 2 , 1 ⋅ a 2 2 , 2 ⋅ a 3 2 , . . . , ( n − 1 ) ⋅ a n 2 } \sum\left \{ 0\cdot a_1^2,1 \cdot a_2^2,2 \cdot a_3^2,...,(n-1)\cdot a_n^2 \right \} {0a12,1a22,2a32,...,(n1)an2}
第二项对答案的贡献是 ∑ { ( n − 1 ) ⋅ a 1 2 , ( n − 2 ) ⋅ a 2 2 , ( n − 3 ) ⋅ a 3 2 , . . . , 0 ⋅ a n 2 } \sum\left \{ (n-1)\cdot a_1^2,(n-2) \cdot a_2^2,(n-3) \cdot a_3^2,...,0\cdot a_n^2 \right \} {(n1)a12,(n2)a22,(n3)a32,...,0an2}
加上第三项,恰好每一项的平方对答案的贡献就是 n ⋅ a i 2 n\cdot a_i^2 nai2
= n ∑ i = 1 n a i 2 − ( ∑ i = 1 n a i ) 2 =n\overset{n}{\underset{i=1}{\sum}}a_i^2-\left(\overset{n}{\underset{i=1}{\sum}}a_i\right)^2 =ni=1nai2(i=1nai)2

QED.

当然,把减号变成加号的话,直接前缀和优化一波,也是可以做的。

这个公式的高维形式与第一个公式密切相关,似乎就要涉及到多项式定理了,等我四月之后研究一下。

阿贝尔部分求和公式

∑ i = 1 n a i b i = b n ∑ i = 1 n a i + ∑ k = 1 n − 1 ( ∑ i = 1 k a i ) ( b k − b k + 1 ) \overset{n}{\underset{i=1}{\sum}}a_ib_i=b_n\overset{n}{\underset{i=1}{\sum}}a_i+\overset{n-1}{\underset{k=1}{\sum}}\left(\overset{k}{\underset{i=1}{\sum}}a_i\right)(b_k-b_{k+1}) i=1naibi=bni=1nai+k=1n1(i=1kai)(bkbk+1)

这个式子也是中看不中用,你可能觉得直接暴力枚举右边是O(n2),可以转化到左边是O(n)。但事实上右边直接用前缀和优化,也可以到O(n)。
但是这个式子思路确实特别巧妙,考虑一下证明:
首先观察最后那个二重和式:
这其实是在说,对于和式的值,每个 a i a_i ai都与 b k b_k bk做一个正的贡献,再与 b k + 1 b_{k+1} bk+1做一个负的贡献。等到下一次 a i a_i ai b k + 1 , b k + 2 b_{k+1},b_{k+2} bk+1,bk+2做贡献的时候, a i a_i ai b k + 1 b_{k+1} bk+1做的贡献就被抵消了。

唯二没被抵消的贡献之一就是 a k a_k ak b k b_k bk做的贡献,因为并没有 b k − 1 b_{k-1} bk1来抵消它。

剩下一个多算的地方就是当k=n-1时,计算的 a i a_i ai b k + 1 b_{k+1} bk+1的负的贡献,前面加了一项 b n ∑ i = 1 n a i b_n\overset{n}{\underset{i=1}{\sum}}a_i bni=1nai来抵消它。
QED.

这个公式难写出高维形式。

后记

于是皆大欢喜。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值