codeforce 上有一道题 。 rng_58 用一个奇妙的公式解决了这个问题。并且给出了公式的证明,这里给出另一个比较好的证明。
$d(n)$ 的一个公式
按照公式,我们有 $d(n) = \sum_{i \mid n} 1$。其实这个公式可以推广为
$$ d(n_1,\cdots,n_m) = \sum_{i_1 \mid n_1} \cdots \sum_{i_m \mid n_m} 1, \; gcd(i_s,i_t)=1,1 \leq s < t \leq m$$
Proof: 数学归纳法证明:$m=1$ 时结论显然。
设结论对 $m-1$ 成立。
$$ \begin{aligned}
d(n_1,\cdots,n_m) &= \sum_{i \mid n_1,\cdots,n_m} 1 = \sum_{d \mid n_m} \sum_{i \mid n_1,\cdots,n_m , gcd(i,n_m)=d} 1 \\
&= \sum_{d \mid n_m} \sum_{\frac{i}{d} \mid n_1,\cdots,n_{m-1} , gcd(\frac{i}{d},\frac{n_m}{d})=1} 1 \\
&= \sum_{d \mid n_m} \sum_{i \mid n_1,\cdots,n_{m-1} , gcd(i,d)=1} 1
\end{aligned} $$
由数学归纳法知,原结论成立。
上面公式的一个应用
$$ \sum_{i_1 = 1} ^{n_1} \cdots \sum_{i_m = 1} ^{n_m} d(n_1,\cdots,n_m) = \sum_{gcd(i_s,i_t)=1,1 \leq s < t \leq m } \lfloor \frac{n_1}{i_1} \rfloor \cdots \lfloor \frac{n_m}{i_m} \rfloor $$
$m=2$ 的另一个公式
令 $F(n) = \sum_{i=1} ^n \lfloor \frac{n}{i} \rfloor $,则显然
$$ \begin{aligned}
\sum_{i=1} ^n \sum_{j=1,gcd(i,j)=1} ^m \lfloor \frac{n}{i} \rfloor \lfloor \frac{m}{j} \rfloor &= \sum_{i=1} ^n \lfloor \frac{n}{i} \rfloor \sum_{t \mid i} \mu(t) \sum_{1 \leq j \leq m, t \mid j} \lfloor \frac{m}{j} \rfloor \\
&= \sum_{i=1} ^n \lfloor \frac{n}{i} \rfloor \sum_{t \mid i} \mu(t) F(\lfloor \frac{m}{t} \rfloor) \\
&= \sum_{t} \mu(t) F(\lfloor \frac{m}{t} \rfloor) \sum_{1 \leq i \leq n, t \mid i} \lfloor \frac{n}{i} \rfloor \\
&= \sum_{t} \mu(t) F(\lfloor \frac{m}{t} \rfloor) F(\lfloor \frac{n}{t} \rfloor)
\end{aligned} $$
即
$$ \sum_{i=1} ^n \sum_{j=1} ^m gcd(ij) = \sum_{t} \mu(t) F(\lfloor \frac{m}{t} \rfloor) F(\lfloor \frac{n}{t} \rfloor) $$
这说明我们可以在 $O(n \log n)$ 复杂度内计算改问题。
可是 $m>2$ 就比较麻烦了。
$f(n) = \sum_{i=1} ^n d(i) = \sum_{i=1} \lfloor \frac{n}{i} \rfloor$
上面这个公式有趣的是,若要求单个的 $f(n)$ 用后面一个可以在 $O(\sqrt{n})$ 复杂度解决,而如果要求 $f(1),\cdots,f(n)$ 则可以用前面一个公式在 $O(n \log n)$ 复杂度解决。
codeforce 235
求解:
$$ \sum_{i=1}^a \sum_{j=1}^b \sum_{k=1}^c d(ijk) $$
如果令 $f(n) = \sum_{i=1} ^n d(i),g(n)=\sum_{i \mid n} \mu(i) f(\lfloor \frac{c}{i} \rfloor) $
那么
$$ \sum_{i=1}^a \sum_{j=1}^b \sum_{k=1}^c d(ijk) = \sum_{t} \mu(t) \lfloor \frac{a}{it} \rfloor \lfloor \frac{b}{it} \rfloor g(ijt^2)$$
1 | /*------ Welcome to my blog: http://dna049.com ------*/ |