P3598 Koishi Loves Number Theory

gcd(xa1,xb1)=xgcd(a,b)1\gcd(x^a-1,x^b-1)=x^{\gcd(a,b)}-1

lcm(S)=TSgcd(T)(1)T1\operatorname{lcm}(S)=\prod_{T\subset S}\gcd(T)^{(-1)^{|T|-1}}

于是现在就是要求固定长度和 gcd\gcd 下的子集个数。

一种是发现状态数很少,直接开 map 推过去。

另一种是直接莫反。

10910^9 下的因子个数最多 13441344 个。

ans=d(xd1)f(d)f(n)=ndμ(dn)g(c(n))g(n)=i=1n(1)i1(ni)ans=\prod_d (x^d-1)^{f(d)}\\ f(n)=\sum_{n|d}\mu(\frac{d}{n})g(c(n))\\ g(n)=\sum_{i=1}^{n}(-1)^{i-1}\begin{pmatrix}n \\ i\end{pmatrix}

c(n)c(n) 是倍数出现次数。

发现 g(n)=1g(n)=1

但是这样中间枚举倍数时复杂度会转到值域上。

考虑另一种莫反,记 F(x)F(x) 表示 gcd\gcd 至少为 xx 时的转移系数之和。

F(x)=(1)S+1[xk,kS]F(x)=\sum (-1)^{|S|+1}[x|k,\forall k\in S]

发现 FF 就是 gg,所以 F(x)=1F(x)=1

我们现在要容斥出 gcd\gcdxx 的转移系数,那么用 F(x)F(x) 减去会出现的 xyx|yxyx\ne yF(y)F(y) 即可。

做完了。

深层次地,μ\mu 应该是指的对于值域上的数的容斥,对于值域很大但可能出现的数很少的情况下,可以考虑第二种莫反。

posted @ 2023-11-05 12:06  蒟蒻orz  阅读(0)  评论(0编辑  收藏  举报  来源