差分数状数组
用于区间加和区间查询,较线段树来讲更为简洁
之所以称之为差分数状数组,是因为其运用了差分的思想实现了区间加值。
首先考虑差分数组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=1xd[i] a[x]=\sum_{i=1}^xd[i] a[x]=i=1∑xd[i]
再设Sum数组为a数组的前缀和,则有
Sum[x]=∑i=1xa[i] Sum[x]=\sum{_{i=1}^x}a[i] Sum[x]=∑i=1xa[i]
带入对于d数组的定义,则有
Sum[x]=∑i=1x∑j=1id[j] Sum[x]={\sum_{i=1}^x\sum_{j=1}^i}d[j] Sum[x]=i=1∑xj=1∑id[j]
根据上式可推出
Sum[x]=∑i=1x(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]
分离两侧有
Sum[x]=(x+1)×∑i=1x−∑i=1xi×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=P1a1P2a2...Pnan N=P_1^{a_1}P_2^{a_2}...P_n^{a_n} N=P1a1P2a2...Pnan
则其正因数的个数是
δ0(N)=(1+a1)(1+a2)...(1+an) \delta_0(N)=(1+a_1)(1+a_2)...(1+a_n) δ0(N)=(1+a1)(1+a2)...(1+an)
其全体正因数之和是
δ1(N)=(1+p1+p12+…p1a1)(1+p2+p22+…p2a2)...(1+pn+pn2+…pnan) \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)