差分数状数组
用于区间加和区间查询,较线段树来讲更为简洁
之所以称之为差分数状数组,是因为其运用了差分的思想实现了区间加值。
首先考虑差分数组d:
d [ i ] = a [ i ] − a [ i − 1 ] d[i]=a[i]-a[i-1] d[i]=a[i]−a[i−1]
则对于a[x]有
a [ x ] = ∑ i = 1 x d [ i ] a[x]=\sum_{i=1}^xd[i] a[x]=i=1∑xd[i]
再设Sum数组为a数组的前缀和,则有
S u m [ x ] = ∑ i = 1 x a [ i ] Sum[x]=\sum{_{i=1}^x}a[i] Sum[x]=∑i=1xa[i]
带入对于d数组的定义,则有
S u m [ x ] = ∑ i = 1 x ∑ j = 1 i d [ j ] Sum[x]={\sum_{i=1}^x\sum_{j=1}^i}d[j] Sum[x]=i=1∑xj=1∑id[j]
根据上式可推出
S u m [ x ] = ∑ i = 1 x ( x − i + 1 ) × d [ i ] Sum[x]=\sum_{i=1}^x(x-i+1) \times d[i] Sum[x]=i=1∑x(x−i+1)×d[i]
分离两侧有
S u m [ x ] = ( x + 1 ) × ∑ i = 1 x − ∑ i = 1 x i × d [ i ] Sum[x]=(x+1)\times\sum_{i=1}^x-\sum_{i=1}^x{i \times d[i]} Sum[x]=(x+1)×i=1∑x−i=1∑xi×d[i]
综上针对区间和的维护,只需要维护两个差分数组的数状数组($ d[i] 、 、 、i*d[i]$)即可。
#唯一分解定理
一个大于1的正整数N,若其标准分解式是
N = P 1 a 1 P 2 a 2 . . . P n a n N=P_1^{a_1}P_2^{a_2}...P_n^{a_n} N=P1a1P2a2...Pnan
则其正因数的个数是
δ 0 ( N ) = ( 1 + a 1 ) ( 1 + a 2 ) . . . ( 1 + a n ) \delta_0(N)=(1+a_1)(1+a_2)...(1+a_n) δ0(N)=(1+a1)(1+a2)...(1+an)
其全体正因数之和是
δ 1 ( N ) = ( 1 + p 1 + p 1 2 + … p 1 a 1 ) ( 1 + p 2 + p 2 2 + … p 2 a 2 ) . . . ( 1 + p n + p n 2 + … p n a n ) \delta_1(N)=(1+p_1+p_1^2+…p_1^{a_1})(1+p_2+p_2^2+…p_2^{a_2})...(1+p_n+p_n^2+…p_n^{a_n}) δ1(N)=(1+p1+p12+…p1a1)(1+p2+p22+…p2a2)...(1+pn+pn2+…pnan)