卧薪尝胆,厚积薄发。
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$
就行了。
In tag:
数学-莫比乌斯反演
Copyright © 2020
wjh15101051
ღゝ◡╹)ノ♡