一开始没看见F(1) = 0。按一般的约数个数函数推了,后来发现了,一慌:读错题了,但是忽然想到F(1) = 0不过是把gcd == 1的贡献减去了而已。。。写一下推的过程:
设 $ D(x) = \sum_{d|x}^{ } 1 $ 也就是x的约数的个数。(与本题中F的区别就是$ D(1)=1 $) $ \sum_{i=1}^{n} D(gcd(i, n)) = \sum_{d|n}^{ } \sum_{k=1}^{\lfloor \frac{n}{d} \rfloor} D(d) [gcd(k, \frac{n}{d}) == 1] $ $ = \sum_{d|n}^{ } D(d) * \sum_{k=1}^{\lfloor \frac{n}{d} \rfloor} [gcd(k, \frac{n}{d}) == 1] $ $ = \sum_{d|n} D(d) * \phi(\frac{n}{d})$ 发现是个狄利克雷卷积的形式,我们先变换一下:(下面这个$ * $表示狄利克雷卷积运算) $ = D * \phi$ = $ 1 * 1 * \phi$ = $ id * 1$ 到这里求解就非常容易了,就是 $ = \sum_{d|n} \frac{n}{d} $ 那原题里面不是D函数,而是F,区别在于$ F(1) = 0 $,怎么办 注意到原式子 $\sum_{i=1}^{n} F(gcd(i, n))$ ,我们求出来的是 $ \sum_{i=1}^{n} D(gcd(i, n))$,只有$ gcd(i, n) == 1 $ 的时候,F和D有偏差。 对于每一个$ gcd(i, n) == 1 $ ,我们都刚好多算了$ 1 $,所以最后我们答案多算了$ \phi(n) $,减去即可。 最终 $ Ans = \sum_{d|n} \frac{n}{d} - \phi(n) $ 可以在$ O(\sqrt{n})$ 的时间复杂度内求解出来。 |
|
|
|
AAAAAAA
|
|
文件名打错了!?两次都不过,心态炸了
题目 120 [NOIP 2007]Hanoi双塔问题
2017-05-17 20:18:32
|
|
我好水啊qwq
|
|
我好水啊qwq
|
|
下面是题解:(白色的字体,选中即可看到)
维护一个滑动矩形内的权值和,这个矩形的宽度是固定R-L+1的,因此我们把矩形 [i-R, i-L] 这一段直接合并了就好了,然后 一般的线段树/树状数组 就可以维护了,并不需要可持久化数据/树套树等。 |
|
看这题看了半年了,终于过了……想死……
PS:果然后做有好处,地雷都被踩完了……
题目 2561 [NOIP 2016]愤怒的小鸟
2017-05-17 18:04:44
|
|
正反dp是个玄学……
题目 217 [USACO Open05] 疾病管理
2017-05-17 17:15:35
|
|
滑稽
|
|
题目 2561 [NOIP 2016]愤怒的小鸟
2017-05-17 16:27:24
|
|
线段树233
|
|
zzhzz
|
|
zzh
|
|
zzh
题目 2417 [HZOI 2016]在路上
2017-05-17 15:35:34
|
|
实数神坑。。。。。。。。。。。
|
|
2450双倍经验233
|
|
ST表求LCA
一A2333 |
|
行列式的基础练习
|
|
求dalao解答为什么会错掉啊!..在自己电脑上跑没问题啊
|