因为本人太菜,就只总结了几道题。
[SDOI2015] 约数个数和 + [BZOJ2673] Jzptab + [SDOI2014] 数表 + [SDOI2017] 数字表格
下面总结一下这几道题推式子的技巧
[SDOI2015] 约数个数和
求 (sum_isum_jd(ij))
首先要知道 (d(ij) = sum_{x|i}sum_{y|j} [gcd(x,y)==1]) 证明考虑一一映射
之后的便是一步一步提出式子
$ = sum_i sum_j sum_{x|i} sum_{y|j} [gcd(x,y) == 1] $
$= sum_x sum_y frac n x frac m y [gcd(x,y) == 1 ] $ 接着将 ([gcd==1]) 变为 (mu) 即可
[BZOJ2673] Jzptab
求 (sum_isum_jlca(i,j))
我们习惯于求 (gcd) 不难想到 (gcd(n,m) * lca(n,m) = nm)
于是 $sum_isum_jfrac{ij}{gcd(i,j)} = sum_ddsum_{i=1}^{frac nd}sum_{j=1}^{frac md}ij[gcd(i,j)==1] $
(sum_{d=1}^ndsum_{x=1}^{frac n d} x^2mu(x)S(frac n {xd}) S(frac m {xd}))
这里又一部很经典的变换,证明较为复杂,需要将原式一一映射到变式上去。只需记住其中心思想 -> 能够先枚举较为复杂的变量然后再算(改变求和顺序)
令 (T = xd),则 $ sum_{T=1}^{n} TS(frac n T) S(frac m T)sum_{t|T}mu(t)t $
有了这个之后就可以直接数论分块计算了
[SDOI2014] 数表
求 (sum_{i=1}^nsum_{j=1}^mo(gcd(i,j)))
因为对 (o(x)) 有限制,还不能就把 (o(x)) 直接消掉,如果消掉了就不好表示出限制条件
所以 (sum_{d=1}^{n}sum_{i=1}^{frac n d} sum_{j = 1}^{frac m d} o(d)[gcd(i,j)==1]=sum_{d=1}^no(d)sum_{t=1}^{frac n d}mu(t)*frac {n} {dt} *frac {m} {dt})
又是那一步经典变化 ,观察到可以数论分块下部为 (dt) 换元
(sum_{T=1}^nsum_{t|T}o(t)mu(frac T t) * S(frac nT) * S(frac m T))
[SDOI2017]数字表格
求 (prod_{i=1}^nprod_{j=1}^mfi(gcd(i,j)))
因为 (gcd) 相同的会出现很多次(注意对于连乘操作,如果要把后面的往前提,那么必须要把式子变到幂次那里,并换为连加符号)
(prod_{i=1}^nfi(i)^{sum_{i|d}F(d)mu(frac d i)} = prod_{i=1}^nfi(i)^{sum_{d=1}^{n/i}frac n {di} frac m {di}mu(d)})
同样的考虑换元
(prod_{T=1}^{n}prod_{i|T}fi(i)^{mu(frac T i)frac n T frac mT})
这个式子看上去可以整除分块了,但是又长得不太一样,要前缀积处理
推式子技巧提炼
因为推式子很活,这里只写出一部分做思路提示,一些比较生搬硬套的不会写下
- (d(ij) = sum_{x|i}sum_{y|j}[gcd(x,y)==1])
- (lcm(i,j)=frac{ij}{gcd(i,j)})
- gcd 的处理 a. 决定计算个数的 (gcd) 可以莫反
- gcd 的处理 b. 在整个前面枚举 (gcd) ,然后再后面添加 ([gcd(i,j)==d])
- gcd 的处理 c. 与前面作用相同只是给 gcd 套上 (Id)
- gcd 的处理 d. 对于 ([gcd(i,j)==d]) 提出公因数 (d)
- gcd 的处理 e. 对于([gcd(i,j)==1] ->sum_{x|i,x|j}mu(x))
- 式子变换处理 a. 一般来说不会保留 (sum_{d|n}) 这时直接换元 令 (t = frac nd)
- 式子变换处理 b. 对于内嵌的 (sum_{d|i}) 将这个往外提原本在外面的加上 ([gcd(i,j)==d])
- 式子变换处理 c. 对于 $sum_{t=1}nsum_{d=1}{frac n t} S(frac n {dt}) $形如这样的结构可以换元变为 (sum_{T=1}^{n}sum_{t|T} S(frac n T))