卧薪尝胆,厚积薄发。
SDOI2018 反回文串
Date: Sat Oct 20 13:03:14 CST 2018 In Category: NoCategory

Description:

给出长度和字符集大小,求所有循环移位后是回文串的字符串个数对 $p$ 取模。
$1\leqslant n\leqslant 10^{18}$

Solution:

设 $f(i)$ 表示循环节长度为 $i$ 的字符串个数,那么显然有: $$ g(n)=k^{\lceil\frac n2\rceil}=\sum_{d|n}f(d) $$ 那么根据莫比乌斯反演可以得到: $$ f(n)=\sum_{d|n}\mu(\frac nd)g(d) $$ 思考一下 $f(i)$ 对答案的贡献,不难发现是: $$ h(i)= \begin{cases} i&i是奇数\\ \frac i2&i是偶数 \end{cases} $$ 因为偶数的两个回文半径拼起来还是回文串。
那么: $$ \begin{align} ans&=\sum_{d|n}f(d)h(d)\\ &=\sum_{d|n}h(d)\sum_{p|d}\mu(\frac dp)g(p)\\ &=\sum_{p|n}g(p)\sum_{p|d,d|n}h(d)\mu(\frac dp)\\ &=\sum_{p|n}g(p)\sum_{d|\frac np}h(dp)\mu(d)\\ \end{align} $$ 发现 $h(dp)$ 很不好处理,我们考虑能否把 $d$ 提出来,即什么时候 $h(dp)=dh(p)$ ,讨论一下可以发现只有当 $d$ 为偶数 $p$ 为奇数的时候 $h(dp)=\frac{dp}2\ne dh(p)$ ,但是这个时候一定满足 $\frac pn$ 为偶数,那么我们可以把所有奇数和偶数按 $d-2d$ 这样配对,由于后面有一个莫比乌斯函数因此 $2$ 的幂次不超过 $1$ ,然后会发现: $$ h(dp)\mu(d)=dp\mu(d)\\h(2dp)\mu(2d)=dp-mu(d) $$ 也就是说如果存在这种情况整个后面那个和式答案都是 $0$ ,因此我们可以直接操作: $$ \begin{align} ans&=\sum_{p|n}g(p)\sum_{d|\frac np}h(dp)\mu(d)\\ &=\sum_{p|n}g(p)\sum_{d|\frac np}dh(p)\mu(d)\\ &=\sum_{p|n}g(p)h(p)\sum_{d|\frac np}d\mu(d)\\ &=\sum_{p|n}g(p)h(p)w(\frac np)\\ &=\sum_{p|n}g(\frac np)h(\frac np)w(p)\\ \end{align} $$ 最难求的显然是 $w(x)$ ,把质数的幂拆开之后就可以发现: $$ w(x)=\prod_{i}(1-p_i) $$ 于是 $pollard-rho$ 分解一下素因子,然后 $dfs$ 枚举 $p$ 就行了。
Copyright © 2020 wjh15101051
ღゝ◡╹)ノ♡