zoukankan      html  css  js  c++  java
  • 狄利克雷生成函数与其应用

    狄利克雷生成函数是数论中的一项重要工具,与 ( ext{OI}) 也是一个不可分割的存在,能将一些数论式子推向本质,且能很好地构造筛法。

    注:以下讨论若无特殊说明 (p) 代表一个质数,( ext{Prime}) 代表全体质数集。

    (1.) 狄利克雷生成函数初步

    ( ext{Part 1}) 定义与基本定理

    一般的,我们如下定义一个数论函数 (f)狄利克雷生成函数,简称 ( ext{dgf})

    (F(z)=sumlimits_{ngeq 1}dfrac{f(n)}{n^z}) ,通常有 (f(1)=1)

    与其他生成函数一样,取系数得到一般项是其主要目的之一,可记作 (f(n)=[n^{-z}]F(z))

    而耳熟能详的狄利克雷卷积,同其他生成函数一样,是两个狄利克雷生成函数的积。

    若设 (G(z)=sumlimits_{ngeq 1}dfrac{g(n)}{n^z})(f)(g) 的卷积就是 (F(z) imes G(z)=H(z))

    同样设 (H(z)=sumlimits_{ngeq 1}dfrac{h(n)}{n^z}) ,则有 (h(n)=sumlimits_{d|n}f(d)g(n/d))(cdotscdots(1.1.1))

    这是因为 (F,G) 中的一项 (dfrac{f(n)}{n^z},dfrac{g(m)}{m^z}) 之积 (dfrac{f(n)g(m)}{(nm)^z}) 能贡献到 (dfrac{h(nm)}{(nm)^z}) 中。

    还有一个显而易见的性质:

    (f(n))( ext{dgf})(F(z)) ,则 (n^tf(n))( ext{dgf})(F(z-t))(cdotscdots(1.1.2))

    因为 (sumlimits_{ngeq 1}dfrac{n^tf(n)}{n^z}=sumlimits_{ngeq 1}dfrac{f(n)}{n^{z-t}}=F(z-t))

    接下来是狄利克雷生成函数的最本质也最有用的性质:

    (f) 为积性函数,即 (forall ij=n,gcd(i,j)=1,f(n)=f(i)f(j))

    (F(z)=sumlimits_{ngeq 1}dfrac{f(n)}{n^z}=prodlimits_{pin ext{Prime}}1+frac{f(p)}{p^z}+frac{f(p^2)}{p^{2z}}+frac{f(p^3)}{p^{3z}}+dots=prodlimits_{pin ext{Prime}}sumlimits_{kgeq 0}dfrac{f(p^k)}{p^{kz}}cdotscdots(1.1.3))

    证明:

    从右往左推,对每个质数每一个的 (dfrac{f(p^k)}{p^{kz}}) 都能与其他一些质数的这种项乘其来得出 (dfrac{f(p_1^{alpha_1})f(p_2^{alpha_2})dots f(p_k^{alpha_k})}{p_1^{alpha_1z}p_2^{alpha_2z}dots p_k^{alpha_kz}}=dfrac{f(p_1^{alpha_1}p_2^{alpha_2}dots p_k^{alpha_k})}{(p_1^{alpha_1}p_2^{alpha_2}dots p_k^{alpha_k})^z}) 。由唯一分解定理可得出所有正整数 (n)(dfrac{f(n)}{n^z}) 将不重不漏地出现,求和后就是 (F(z))

    观察一下最后一个等号,会发现对每个 (p)(dfrac{1}{p^z}) 固定不变,所以有时会设其为 (x) ,再对每个 (p) 写成关于 (x) 的级数 (f_p(x)=sumlimits_{kgeq 0}f(p^k)x^k) ,称之为贝尔级数,本质上就是是狄利克雷生成函数的衍生,二者相互依存。

    ( ext{Part 2}) 简单的运用

    (1.) (f(n)=1)

    如果将 (f(n)=1) 带入其狄利克雷生成函数,得到 (F(z)=sumlimits_{ngeq 1}dfrac{1}{n^z}=zeta(z))

    这就是黎曼 (zeta) 函数,它将在接下来的运用中发挥重要作用。

    由于 (f(n)=1) 满足积性函数的定义,所以可用 ((1.1.3)) 改写:

    (F(z)=sumlimits_{ngeq 1}{dfrac{1}{n^z}}=prodlimits_{pin ext{Prime}}sumlimits_{kgeq 0}dfrac{1}{p^{kz}}=prodlimits_{pin ext{Prime}}sumlimits_{kgeq 0}(p^{-z})^k=prodlimits_{pin ext{Prime}}dfrac{1}{1-p^{-z}}cdotscdots(1.2.1))

    (2.) (f(n)=mu(n))

    由于 (mu(n)) 为积性函数,所以可以直接用 ((1.1.3)) 展开。

    所以只用看对每个 (p^k)(mu(p^k)) 的值。

    (mu(p^k)=egin{cases}1,k=0\-1,k=1\0,kgeq 2end{cases})

    所以 (F(z)=prodlimits_{pin ext{Prime}}sumlimits_{kgeq 0}dfrac{mu(p^k)}{p^{kz}}=prodlimits_{pin ext{Prime}}1+dfrac{-1}{p^z}=prodlimits_{pin ext{Prime}}1-p^{-z}=dfrac{1}{zeta(z)}cdotscdots(1.2.2))

    如果把右侧的 (zeta(z)) 乘到左边,得到 (F(z)zeta(z)=1)

    取两边 (n^{-z}) 的系数,那 (F(z)zeta(z)) 就是两个 ( ext{dgf}) 的卷积,而右边仅在 (n=1) 时值为 (1)

    所以 (sumlimits_{d|n}mu(d) imes1=sumlimits_{d|n}mu(d)=[n=1]cdotscdots(1.2.3))

    有了莫比乌斯函数的 ( ext{dgf}) ,我们将揭示莫比乌斯反演的本质。

    莫反的原式如下 (g(n)=sumlimits_{d|n}f(d)Leftrightarrow f(n)=sumlimits_{d|n}g(d)mu(n/d)cdotscdots(1.2.4))

    事实上由于卷积, (g(n)=sumlimits_{d|n}f(d)) 可看做 (G(z)=F(z)zeta(z)) ,两边 (n^{-z}) 的系数。

    那把右边 (zeta(z)) 除到左边,得到 (G(z)dfrac{1}{zeta(z)}=F(z))

    而莫比乌斯函数的 ( ext{dgf}) 就是 (dfrac{1}{zeta(z)}) ,所以 (G(z)dfrac{1}{zeta(z)}) 就是 (g)(mu) 的卷积。

    再取两边 (n^{-z}) 的系数就能得到 (sumlimits_{d|n}g(d)mu(n/d)=f(n))

    其实 ((1.2.3)) 仅是 ((1.2.4)) 的一个特例。

    (3.) (f(n)=varphi(n))

    其中 (varphi(n))欧拉 (varphi) 函数,代表 (n) 以内与 (n) 互质的数的个数。

    (varphi(n)=nsumlimits_{p|n,pin ext{Prime}}1-dfrac{1}{p}) ,所以 (varphi) 仍是一个积性函数。

    为了求其 ( ext{dgf}) 我们依然想得知 (varphi(p^k)) 的值:

    (varphi(p^k)=egin{cases}1,k=0\left(1-frac{1}{p} ight)p^k,kgeq 1end{cases})

    所以

    [F(z)=prodlimits_{pin ext{Prime}}1+left(1-frac{1}{p} ight)sumlimits_{kgeq 1}dfrac{p^k}{p^{kz}}=prodlimits_{pin ext{Prime}}frac{1}{p}+left(1-frac{1}{p} ight)sumlimits_{kgeq 0}left(p^{1-z} ight)^k ]

    [=prodlimits_{pin ext{Prime}}frac{1}{p}+left(1-frac{1}{p} ight)dfrac{1}{1-p^{1-z}}=prodlimits_{pin ext{Prime}}dfrac{1-p^{1-z}+p-1}{p(1-p^{1-z})} ]

    [=prodlimits_{pin ext{Prime}}dfrac{1-p^{-z}}{1-p^{1-z}}=dfrac{zeta(z-1)}{zeta(z)}cdotscdots(1.2.5) ]

    因为 (dfrac{zeta(z-1)}{zeta(z)}=zeta(z-1)dfrac{1}{zeta(z)}) 是两个 ( ext{dgf}) 的卷积。

    而由 ((1.1.2)) (zeta(z-1))(n)( ext{dgf})(dfrac{1}{zeta(z)})(mu(n))( ext{dgf})

    所以 ([n^{-z}]dfrac{zeta(z-1)}{zeta(z)}=sumlimits_{d|n}dmu(n/d))

    ([n^{-z}]dfrac{zeta(z-1)}{zeta(z)}=[n^{-z}F(z)]=varphi(n))

    因而得出 (varphi(n)=sumlimits_{d|n}dmu(n/d)cdotscdots(1.2.6))

    但在 (F(z)=dfrac{zeta(z-1)}{zeta(z)}) 中把 (zeta(z)) 乘到左边得到 (F(z)zeta(z)=zeta(z-1))

    卷积后取两边系数得出 (sumlimits_{d|n}varphi(d)=ncdotscdots(1.2.7))

    这其实是 ((1.2.6)) 莫反后能得到的结果。

    还有一种玩法,在 (F(z)=dfrac{zeta(z-1)}{zeta(z)}) 中将 (zeta(z-1)) 除到左边得到 (F(z)dfrac{1}{zeta(z-1)}=dfrac{1}{zeta(z)})

    那由 ((1.1.2)) 得出 (dfrac{1}{zeta(z-1)})(nmu(n))( ext{dgf})

    所以 (sumlimits_{d|n}dmu(d)varphi(n/d)=mu(n)cdotscdots(1.2.8))

    (4.) (f(n)=mu(n)^2)

    由于 (mu(n)) 是积性函数,所以 (mu(n)^2) 仍是积性函数。

    (mu(p^k)^2=egin{cases}1,k=0\1,k=1\0,kgeq 2end{cases})

    所以 (F(z)=prodlimits_{pin ext{Prime}}1+dfrac{1}{p^z}=prodlimits_{pin ext{Prime}}dfrac{1-p^{-2z}}{1-p^{-z}}=dfrac{zeta(z)}{zeta(2z)}cdotscdots(1.2.9))

    这似乎并不与之前讨论的函数有多少密切的联系,因为 (zeta(2z)) 并不十分好处理,但将与接下来的几个函数产生一些有趣的结论。

    (5.) (f(n)=lambda(n))

    其中 (lambda(n)=(-1)^{Omega(n)})(Omega(n))(n) 的质因子个数,相同的算多个。

    (n=p_1^{alpha_1}p_2^{alpha_2}dots p_k^{alpha_k}) ,则 (Omega(n)=alpha_1+alpha_2+dots+alpha_k,lambda(n)=(-1)^{alpha_1+alpha_2+dots+alpha_k})

    由于 (forall ij=n,Omega(i)+Omega(j)=Omega(n)) ,所以 (lambda(n)) 是完全积性的。

    (lambda(p^k)=(-1)^k)

    所以 (F(z)=prodlimits_{pin ext{Prime}}sumlimits_{kgeq 0}dfrac{(-1)^k}{p^{kz}}=prodlimits_{pin ext{Prime}}sumlimits_{kgeq 0}left(-p^{-z} ight)^k=prodlimits_{pin ext{Prime}}dfrac{1}{1+p^{-z}}=prodlimits_{pin ext{Prime}}dfrac{1-p^{-z}}{1-p^{2z}}=dfrac{zeta(2z)}{zeta(z)})

    [cdotscdots(1.2.10) ]

    这竟然与 (mu(n)^2)( ext{dgf}) 完全是倒数关系!

    所以 (sumlimits_{d|n}lambda(d)mu(n/d)^2=[n=1]cdotscdots(1.2.11))

    (6.) (f(n)=[n ext{是完全平方数}])

    这也显然是完全积性函数,(f(p^k)=[2|k])

    所以 (F(z)=prodlimits_{pin ext{Prime}}sumlimits_{kgeq 0}dfrac{1}{p^{2kz}}=prodlimits_{pin ext{Prime}}dfrac{1}{1-p^{-2z}}=zeta(2z))

    (zeta(2z)) 总算能找出了其每项系数。

    ((1.2.9)) 相乘得到的卷积式是 (sumlimits_{d|n}[d ext{是完全平方数}]mu(n/d)^2=sumlimits_{d^2|n}muleft(dfrac{n}{d^2} ight)^2=1cdotscdots(1.2.12))

    看起来比较奇怪,几个非负整数之和仅是 (1) ?其实确实如此。

    (n=p_1^{alpha_1}p_2^{alpha_2}dots p_k^{alpha_k},eta_i=leftlfloordfrac{alpha_i}{2} ight floor)(dleq p_1^{eta_1}p_2^{eta_2}dots p_k^{eta_k}) 且在取等时 (muleft(dfrac{n}{d^2} ight)^2=1)

    但是但凡一个质数的指数少了 (1)(alpha_i-2(eta_i-1)geq 2) ,会出现平方因子,(mu) 值变为 (0)

    再看看与 ((1.2.10)) 结合会出现什么:

    由于 (dfrac{zeta(2z)}{zeta(z)} imes zeta(z)=zeta(2z))

    (n^{-z}) 的系数得出 (sumlimits_{d|n}lambda(d)=[n ext{是完全平方数}]cdotscdots(1.2.13))

    或者看作 (zeta(2z) imes dfrac{1}{zeta(z)}=dfrac{zeta(2z)}{zeta(z)})

    那就得出 (sumlimits_{d|n}[d ext{是完全平方数}]mu(n/d)=sumlimits_{d^2|n}muleft(dfrac{n}{d^2} ight)=lambda(n)cdotscdots(1.2.14))

    (7.) (f(n)=hatphi(n))

    这是我乱搞的一个函数,近似于 (varphi) ,定义为 (hatphi(n)=nsumlimits_{p|n,pin ext{Prime}}1+dfrac{1}{p})

    这显然还是积性函数,且 (hatphi(p^k)=egin{cases}1,k=0\left(1+dfrac{1}{p} ight)p^k,kgeq 1end{cases})

    所以

    [F(z)=prodlimits_{pin ext{Prime}}1+left(1+frac{1}{p} ight)sumlimits_{kgeq 1}dfrac{p^k}{p^{kz}}=prodlimits_{pin ext{Prime}}-frac{1}{p}+left(1+frac{1}{p} ight)sumlimits_{kgeq 0}left(p^{1-z} ight)^k ]

    [=prodlimits_{pin ext{Prime}}-dfrac{1}{p}+left(1+dfrac{1}{p} ight)dfrac{1}{1-p^{1-z}}=prodlimits_{pin ext{Prime}}dfrac{-1+p^{1-z}+p+1}{p(1-p^{1-z})} ]

    [=prodlimits_{pin ext{Prime}}dfrac{1+p^{-z}}{1-p^{1-z}}=prodlimits_{pin ext{Prime}}dfrac{1-p^{-2z}}{(1-p^{1-z})(1-p^{-z})}=dfrac{zeta(z-1)zeta(z)}{zeta(2z)} ]

    [cdotscdots(1.2.15) ]

    这可以与很多 ( ext{dgf}) 乘起来有简洁的形式。

    比如与 (lambda)( ext{dgf} dfrac{zeta(2z)}{zeta(z)}) 相乘得到 (zeta(z-1))

    卷积写出来就是 (sumlimits_{d|n}hatphi(d)lambda(n/d)=ncdotscdots(1.2.16))

    或者与 ([n ext{是完全平方数}])( ext{dgf} zeta(2z)) 相乘得到 (zeta(z-1)zeta(z))

    ([n^{-z}]zeta(z-1)zeta(z)=sumlimits_{d|n}d=sigma_1(n))

    所以 (sumlimits_{d|n}[d ext{是完全平方数}]hatphi(n/d)=sumlimits_{d^2|n}hatphileft(dfrac{n}{d^2} ight)=sigma_1(n)cdotscdots(1.2.17))

    其中 (sigma_k(n)) 定义为 (sigma_k(n)=sumlimits_{d|n}d^k)

    (2.) 杜教筛

    杜教筛是一种比较基本的筛法,配合 ( ext{dgf}) 较灵活,但时间复杂度上具有一定局限性。

    假设要求 (S(n)=sumlimits_{k=1}^{n}f(k))

    其主要思想是构造函数 (g)(h) 使 (sumlimits_{d|k}g(d)f(k/d)=h(k)) ,即 (f)(g) 的狄利克雷卷积为 (h) ,其中 (g)(h) 的前缀和需能较快求出。

    将卷积式两边关于 (k) 求和:

    [sumlimits_{k=1}^{n}h(k)=sumlimits_{k=1}^{n}sumlimits_{d|k}g(d)f(k/d) ]

    [=sumlimits_{d=1}^{n}g(d)sumlimits_{1leq kleq n,d|k}f(k/d)=sumlimits_{d=1}^{n}g(d)S(leftlfloordfrac{n}{d} ight floor) ]

    单独将 (d=1) 的项拎出来,有数论函数下 (g(1)=1) ,再将后面的求和放到等号另一边,就有:

    (S(n)=sumlimits_{k=1}^{n}h(k)-sumlimits_{d=2}^{n}g(d)S(leftlfloordfrac{n}{d} ight floor)cdotscdots(1.3.1))

    对于后面的式子可以数论分块递归下去求出。

    先是 (h(k)) 要方便求前缀和,其次这里的数论分块中还需求出 (g(d)) 的前缀和。

    对于每个搜到的 (S(m)) 要记录一下答案以免重复算,以保证时间复杂度。

    关于时间复杂度的证明(参考了 ( ext{cmd}) 的博客 ):

    假定能在 (O(1)) 的时间内求出 (g,h) 的前缀和。

    每次求 (S) 中传入的值一定能写成 (leftlfloordfrac{n}{k} ight floor) 的形式。

    这是因为假设当前求 (S) 传入的值是 (m) ,每次数论分块时传下去的就会是 (leftlfloordfrac{m}{l} ight floor)

    但最初 (m=n) 且有 (leftlfloordfrac{leftlfloordfrac{n}{a} ight floor}{b} ight floor=leftlfloordfrac{n}{ab} ight floor) 所以求 (S) 中传入的值必然是 (leftlfloordfrac{n}{k} ight floor)

    由于 (leftlfloordfrac{n}{k} ight floor)(O(sqrt n)) 个不同的值,不妨设为 (dfrac{n}{i},1leq ileq sqrt n)

    而求 (S) 传入的值是 (m) 时就会花费 (O(sqrt m)) 的时间整除分块处理 ((1.3.2)) 中第二个求和符号。

    那这样就能得出其时间复杂度为 (O(sumlimits_{i=1}^{sqrt n}sqrt {frac{n}{i}})=O(sqrt nint_{1}^{sqrt n}i^{-frac{1}{2}}di)=O(2sqrt nsqrt {sqrt n})=O(n^{frac{3}{4}}))

    但如果能线性筛出 (T) 之内的 (S) ,那只需对 (n/igeq T) 的进行数论分块,可得出 (ileq n/T)

    这样时间复杂度为:

    (O(T+sumlimits_{i=1}^{n/T}sqrt {n/i})=O(T+2sqrt nsqrt {n/T})=O(T+n/sqrt T+n/sqrt T)geq O(3sqrt[3]{n^2})=O(n^{frac{2}{3}}))

    (T=n^{frac{2}{3}}) 时取等,有最优时间复杂度 (O(n^{frac{2}{3}}))

    事实上 (g,h) 的前缀和并不一定必须要在 (O(1)) 的时间复杂度内求出。

    由于对 (m) 数论分块时所需要的前缀和 (l-1,r) 都能写成 (leftlfloordfrac{m}{w} ight floor) 的形式。

    (exists t,m=leftlfloordfrac{n}{t} ight floor),所以 (g,h) 所需的前缀和也仅是 (leftlfloordfrac{n}{k} ight floor)

    于是能发现 (g,h) 所需的前缀和之值与杜教筛能筛出来的完全相同。

    也就是说,如果 (f*g=h) ,且 (g,h) 的前缀和都能在较快的时间内求出 (leftlfloordfrac{n}{k} ight floor) 的全部前缀和,那 (f) 就能在额外 (O(n^{frac{2}{3}})) 的时间内用杜教筛合并筛出。

    但如果能求出 (f,g) 的全部 (leftlfloordfrac{n}{k} ight floor) 的前缀和,也能求出 (h) 的前缀和。

    (sumlimits_{k=1}^{n}h(k)=sumlimits_{k=1}^{n}sumlimits_{d|k}f(d)g(n/d)=sumlimits_{d=1}^{n}f(d)sumlimits_{k=1}^{leftlfloor frac{n}{d} ight floor}g(k)cdotscdots(1.3.2))

    这也能数论分块求出,需要的也仅是 (f,g)(leftlfloordfrac{n}{k} ight floor) 处的前缀和。

    ( ext{cmd}) 的话总结,就是在 (f*g=h) 时能“知二筛一”。

    先来一些简单的例子:

    (1.) (mu(n))

    由于 (mu(n))( ext{dgf})(dfrac{1}{zeta(z)})

    (sumlimits_{d|n}mu(d)=[n=1])(g(n)=1,h(n)=[n=1]) ,这就是 ((1.2.3))

    所以 (g,h) 都能在 (O(1)) 的时间内求出,再杜教筛一下就能得出 (mu(n)) 的前缀和。

    (2.) (varphi(n))

    由于 (varphi(n))( ext{dgf})(dfrac{zeta(z-1)}{zeta(z)})

    (sumlimits_{d|n}varphi(n)=n)(g(n)=1,h(n)=n),这式子就是 ((1.2.7))

    因此 (g,h) 的前缀和还是能 (O(1)) 求出,再杜教筛出 (varphi(n)) 的前缀和。

    这两题就是杜教筛模板

    (3.) (nvarphi(n))

    ((1.1.2)) 与上个例子知 (nvarphi(n))( ext{dgf})(dfrac{zeta(z-2)}{zeta(z-1)})

    所以 (sumlimits_{d|n}dvarphi(d)left(dfrac{n}{d} ight)=n^2)(g(n)=n,h(n)=n^2)

    仍能 (O(1)) 求出其前缀和。

    但这个例子有一个很好的启示。

    假设已有方法求出 (f(n)) 的前缀和,即构造出了 (sumlimits_{d|n}f(d)g(n/d)=h(n),F(z)G(z)=H(z))

    (n^tf(n)) 的前缀和仍然能类似求出。

    因为 (n^tf(n))( ext{dgf})(F(z-t)) ,而上式能推出 (F(z-t)G(z-t)=H(z-t))

    那只需构造 (g(n)leftarrow n^tg(n),h(n)leftarrow n^th(n)) 即可。

    (4.) (lambda(n))

    ((1.2.13))(sumlimits_{d|n}lambda(d)=[n ext{是完全平方数}])

    所以有 (g(n)=1 ,h(n)=[n ext{是完全平方数}])

    那在杜教筛时为了得知 (leftlfloordfrac{n}{k} ight floor)(h) 的前缀和,可以将全部 (leftlfloorsqrt n ight floor) 个平方数找出来,对每个 (leftlfloordfrac{n}{k} ight floor)(h) 前缀和一次 (operatorname{lowerbound}) 求出,就要花费 (O(sqrt nlog n)) 的时间,记得要把查过的记录下来,不然复杂度会退化。

    那再配合杜教筛就能以 (O(n^{frac{2}{3}}+sqrt nlog n)) 的时间求出 (lambda) 的前缀和。

    事实上在回过头去看 ((1.2.14)) 的式子 (sumlimits_{d^2|n}muleft(dfrac{n}{d^2} ight)=lambda(n))

    所以 (sumlimits_{k=1}^{n}lambda(k)=sumlimits_{k=1}^{n}sumlimits_{d^2|k}muleft(dfrac{n}{d^2} ight)=sumlimits_{d=1}^{sqrt n}sumlimits_{d^2|k,1leq kleq n}muleft(dfrac{n}{d^2} ight)=sumlimits_{d=1}^{sqrt n}sumlimits_{k=1}^{leftlfloorfrac{n}{d^2} ight floor}mu(k))

    这所需要的 (mu(n)) 的前缀和也属于 (leftlfloordfrac{n}{k} ight floor) ,那直接暴力统计 (d) 即可。

    总时间复杂度为 (O(n^{frac{2}{3}}+sqrt n))

    这其实也能反观 ( ext{dgf}) 的强大。

    (5.) $mu(n)^2 $

    按着之前的式子 ((1.2.11):) (sumlimits_{d|n}lambda(d)mu(n/d)^2=[n=1])

    既然上文能 (O(n^{frac{2}{3}})) 求出 (lambda(n))(leftlfloordfrac{n}{k} ight floor) 处的前缀和。

    所以能在额外 (O(n^{frac{2}{3}})) 的时间内求出 (mu(n)^2) 的前缀和。

    但还有更优秀的时间复杂度:

    既然 (mu(n)^2)( ext{dgf})(dfrac{zeta(z)}{zeta(2z)}=zeta(z) imes dfrac{1}{zeta(2z)})

    (dfrac{1}{zeta(2z)}=prodlimits_{pin ext{Prime}}1-dfrac{1}{p^{2z}})

    这可以看做一个 (f(p^k)egin{cases}1,k=0\-1,k=2\0, ext{otherwise}end{cases}) ,的积性函数函数 (f)( ext{dgf})

    所以 (mu ^2) 就是 (f)(g(n)=1) 的卷积,能用 ((1.3.2)) 求出。

    既然每个质数只在出现平方次时 (f) 有值,那这些 (p) 必定 (leq sqrt n)

    所以有值的 (f) 必定是一些互不相同的质数之积的完全平方。

    那仅需要找出 (m=p_1p_2dots p_kleq sqrt n) 的全部 (m) ,满足 (f(m^2)=(-1)^k=mu(m))

    (m) 的数的个数是比 (sqrt n) 略小一点。

    所以时间复杂度因该比 (O(sqrt n)) 略小一点。

    这可以轻松过掉 ( ext{P4318})

    事实上这种方法也是基于后文将要讲述的 ( ext{PN}) 筛的一个特例。

    (6.) (hatphi (n))

    (hatphi(n))( ext{dfg})(dfrac{zeta(z)zeta(z-1)}{zeta(2z)}) ,可以有很多方法求出。

    由于 (dfrac{zeta(z)zeta(z-1)}{zeta(2z)} imesdfrac{zeta(2z)}{zeta(z)}=zeta(z-1))

    所以 (sumlimits_{d|n}hatphi(n)lambda(n/d)=n,g(n)=lambda(n),h(n)=n)

    其中 (lambda(n)) 可按之前所述的方法 (O(n^{frac{2}{3}})) 求出需要的值,那按 ((1.3.1)) 做就完了。

    (dfrac{zeta(z)zeta(z-1)}{zeta(2z)} imeszeta(2z)=zeta(z)zeta(z-1))

    所以 (sumlimits_{d|n}hatphi(d)[n/d ext{是完全平方数}]=sigma_1(n)) ,就是 ((1.2.17))

    若取 (g(n)=[n ext{是完全平方数}],h(n)=sigma_1(n))(g(n)) 的筛法之前已讲述,只需看 (sigma_1(m)) 的前缀和:

    (sumlimits_{k=1}^{m}sigma_1(k)=sumlimits_{k=1}^msumlimits_{d|k}d=sumlimits_{d=1}^{m}dsumlimits_{d|k,1leq kleq m}1=sumlimits_{d=1}^{m}dleftlfloordfrac{n}{d} ight floor)

    于是单次求 (m) 内的 (sigma_1(k)) 的前缀和就能以 (O(sqrt m)) 的时间。

    而需要的 (m) 共有 (O(sqrt n))(leftlfloordfrac{n}{k} ight floor) ,总复杂度是 (O(sumlimits_{i=1}^{sqrt n}sqrt{n/i})=O(n^{frac{3}{4}})) ,这与上文杜教筛类似。

    于是仍要筛出 (n^{frac{2}{3}}) 的所有 (sigma_1(k)) ,才有 (O(n^{frac{2}{3}})) 的时间复杂度。

    还有一种方法: (dfrac{zeta(z)zeta(z-1)}{zeta(2z)}=dfrac{zeta(z)}{zeta(2z)} imes zeta(z-1))

    于是能取 (f(n)=mu(n)^2,g(n)=n) ,就能按 ((3.1.2)) 筛出。

    (mu(n)^2) 的前缀和按上文两种方法都有 (O(n^{frac{2}{3}})) 的方法求出需要的 (leftlfloordfrac{n}{k} ight floor) 处 的前缀和。(第二种方法的处理方式可参考上面 (sigma_1) 的求和)。

    所以,在 ( ext{dgf}) 的帮助下轻而易举地得到了 (3) 种处理 (hatphi) 的前缀和的方法。

    一些例题

    ( ext{P3768})

    题意:求 (sumlimits_{i=1}^{n}sumlimits_{j=1}^{n}ijgcd (i,j),nleq 1.1 imes 10^9)

    直接莫反推式子:

    [sumlimits_{i=1}^{n}sumlimits_{j=1}^{n}ijgcd (i,j)=sumlimits_{d=1}^{n}sumlimits_{i=1}^{n}sumlimits_{j=1}^{n}ij[d=gcd (i,j)] ]

    [=sumlimits_{d=1}^{n}sumlimits_{d|i,1leq i leq n}sumlimits_{d|j,1leq jleq n}ij[gcd(i,j)=d]=sumlimits_{d=1}^{n}d^2sumlimits_{i=1}^{leftlfloorfrac{n}{d} ight floor}sumlimits_{j=1}^{leftlfloorfrac{n}{d} ight floor}ij[gcd(i,j)=1] ]

    [=sumlimits_{d=1}^{n}d^2sumlimits_{i=1}^{leftlfloorfrac{n}{d} ight floor}sumlimits_{j=1}^{leftlfloorfrac{n}{d} ight floor}ijsumlimits_{k|i,k|j}mu(k)=sumlimits_{d=1}^{n}d^2sumlimits_{k=1}^{leftlfloorfrac{n}{d} ight floor}mu(k)sumlimits_{k|i,1leq ileqleftlfloorfrac{n}{d} ight floor}sumlimits_{k|j,,1leq j leq leftlfloorfrac{n}{d} ight floor}ij ]

    [=sumlimits_{d=1}^{n}d^2sumlimits_{k=1}^{leftlfloorfrac{n}{d} ight floor}mu(k)k^2sumlimits_{i=1}^{leftlfloorfrac{n}{kd} ight floor}sumlimits_{j=1}^{leftlfloorfrac{n}{kd} ight floor}ij=sumlimits_{T=1}^{n}left(T^2sumlimits_{k|T}mu(k) ight)sumlimits_{i=1}^{leftlfloorfrac{n}{T} ight floor}sumlimits_{j=1}^{leftlfloorfrac{n}{T} ight floor}i,j ]

    (S(m)=sumlimits_{i=1}^{m}sumlimits_{j=1}^{m}ij=dfrac{m^2(m+1)^2}{4},f(T)=T^2sumlimits_{k|T}mu(k))

    那原式就是 (sumlimits_{T=1}^{n}f(T)g(leftlfloordfrac{n}{T} ight floor)) 可以直接数论分块算,但其中要 (f(T)) 的前缀和。

    而数论分块的边界是 (leftlfloordfrac{n}{w} ight floor) 可以直接杜教筛出 (f(T))

    由上面 (1.)(3.) 中的启示,直接构造 (g(n)=n^2,h(n)=1) 再杜教筛就没了。

    ( ext{P7504})

    题意: 给出 (n,q)(sumlimits_{x=1}^{n}[xot q]sumlimits_{i=1}^{x}[iot x]i,n,kleq 10^9) (原题就是求两次这个)

    (r(k)=sumlimits_{i=1}^{k}[iot k]i) ,则原式只需要求 ([kot q]r(k)) 的前缀和。

    对其莫反:

    [r(k)=sumlimits_{i=1}^{k}isumlimits_{d|i,d|k}mu(d)=sumlimits_{d|k}mu(d)dsumlimits_{i=1}^{n/d}i=dfrac{1}{2}sumlimits_{d|k}mu(d)dleft(dfrac{k^2}{d^2}+dfrac{k}{d} ight) ]

    [=dfrac{1}{2}left(ksumlimits_{d|k}mu(d)dfrac{k}{d}+ksumlimits_{d|k}mu(d) ight)=frac{1}{2}k[k=1]+frac{1}{2}kvarphi(k)=frac{1}{2}[k=1]+frac{1}{2}kvarphi(k) ]

    所以原式就是 (sumlimits_{k=1}^{n}[kot q]r(k)=dfrac{1}{2}left(1+sumlimits_{k=1}^{n}[kot q]kvarphi(k) ight))

    那接下来就希望快速计算 ([kot q]kvarphi(k)) 的前缀和。

    由于 ([kot q]Rightarrowforall i|k,[iot q] ext{且} [(k/i)ot q])

    所以若 (h(n)=sumlimits_{d|n}f(d)g(n/d)) ,那就有 ([not q]h(n)=sumlimits_{d|n}[dot q]f(d)[(n/d)ot q]g(n/d))

    那么在此例中有 (g(n)=n,h(n)=n^2)(3.) 中所述。

    为了杜教筛,接下来的问题就是 ([kot q]k) 的前缀和与 ([kot q]k^2) 的前缀和。

    再将其莫反:

    [sumlimits_{d=1}^{m}[dot q]d^c=sumlimits_{d=1}^{m}d^csumlimits_{k|d,k|q}mu(k)=sumlimits_{k|q}mu(k)sumlimits_{k|d,1leq dleq m}d^c=sumlimits_{k|q}mu(k)k^csumlimits_{d=1}^{leftlfloorfrac{m}{d} ight floor}d^c ]

    由于 (q) 的因子个数是 (O(log q)) 的,这个式子可以在搜到时直接 (O(log(p))) 算。

    由于需要的在提前 (O(n^{frac{2}{3}})) 的线性筛后需要这么算的仅有 (O(n^{frac{1}{3}}))

    所以这部分的总时间复杂度为 (O(n^{frac{1}{3}}log n))

    加上求 (p) 的所有因数以及杜教筛后总体时间复杂度为 (O(sqrt q+n^{frac{1}{3}}log n+n^{frac{2}{3}}))

    ( ext{U183339})

    题意:
    (r(t)=sumlimits_{k=1}^t kleft[gcd(k,t)=1 ight])
    (sumlimits_{i=1}^n sumlimits_{j=1}^n (i^2+j^2+ij)r(gcd(i,j))mod 998244353,nleq 10^{10})

    这也是道我乱搞的题,却无意间发现 (r(n)=dfrac{1}{2}left([n=1]+nvarphi(n) ight)) 竟然在上题中出现了。

    那再莫反看看最终的那个式子要干啥:

    [sumlimits_{i=1}^n sumlimits_{j=1}^n (i^2+j^2+ij)r(gcd(i,j))=sumlimits_{d=1}^{n}sumlimits_{i=1}^{n},sumlimits_{j=1}^{n}(i^2+j^2+ij)r(d)[gcd(i,j)=d] ]

    [sumlimits_{d=1}^{n}r(d)sumlimits_{i=1}^{leftlfloorfrac{n}{d} ight floor}sumlimits_{j=1}^{leftlfloorfrac{n}{d} ight floor}(i^2d^2+j^2d^2+idjd)[gcd(i,j)=1]=sumlimits_{d=1}^{n}d^2r(d)sumlimits_{i=1}^{leftlfloorfrac{n}{d} ight floor}sumlimits_{j=1}^{leftlfloorfrac{n}{d} ight floor}(i^2+j^2+ij)sumlimits_{k|i,k|j}mu(k) ]

    [sumlimits_{d=1}^{n}r(d)d^2sumlimits_{k=1}^{leftlfloorfrac{n}{d} ight floor}mu(k)k^2sumlimits_{i=1}^{leftlfloorfrac{n}{kd} ight floor}sumlimits_{i=1}^{leftlfloorfrac{n}{kd} ight floor}(i^2+j^2+ij)=sumlimits_{T=1}^{n}left(T^2sumlimits_{d|T}r(d)mu(T/d) ight)sumlimits_{i=1}^{leftlfloorfrac{n}{T} ight floor}sumlimits_{i=1}^{leftlfloorfrac{n}{T} ight floor}(i^2+j^2+ij) ]

    这又能数论分块,先看看小括号后面的式子:

    (sumlimits_{i=1}^{m}sumlimits_{j=1}^{m}i^2+j^2+ij=2sumlimits_{i=1}^{m}i^2+left(sumlimits_{i=1}^{m}i ight)^2=dfrac{m(m+1)(11m^2+7m)}{12})

    而前面的为了求前缀和又需要杜教筛了。

    由于 (T^2sumlimits_{d|T}r(d)mu(T/d)=dfrac{1}{2}left(T^2mu(T)+T^2sumlimits_{d|n}dvarphi(d)mu(T/d) ight))

    其中 (T^2mu(T)) 的前缀和按上文某启发已很好求出,剩下的就是 (T^2sumlimits_{d|n}dvarphi(d)mu(T/d)) 的前缀和。

    这玩意又是个卷积,除 (T^2) 外的 ( ext{dgf})(dfrac{zeta(z-2)}{zeta(z-1)} imesdfrac{1}{zeta(z)}=dfrac{zeta(z-2)}{zeta(z-1)zeta(z)})

    所以 (T^2sumlimits_{d|T}r(d)mu(T/d))( ext{dgf}) 就是 (dfrac{zeta(z-4)}{zeta(z-3)zeta(z-2)})

    所以可以构造 (g(n)=[n^{-z}]zeta(z-3)zeta(z-2),h(n)=[n^{-z}]zeta(z-4)=n^4)

    其中 (h(n)=n^4) 的前缀和很好求,是 (sumlimits_{i=1}^{m}i^4=dfrac{x(x+1)(2x+1)(3x^2+3x-1)}{30})

    (g(n)=sumlimits_{d|n}d^3left(dfrac{n}{d} ight)^2=n^2sumlimits_{d|n}d)

    所以 (sumlimits_{i=1}^{m}g(i)=sumlimits_{i=1}^{m}i^2sumlimits_{d|i}d=sumlimits_{d=1}^{m}d^2sumlimits_{i=1}^{leftlfloorfrac{n}{d} ight floor}i) ,可以数论分块 (sqrt m) 求出。

    与之前所述一样,需预处理出前 (n^{frac{2}{3}}) 的前缀和,剩下的数论分块算,才能保证时间复杂度。

    总时间复杂度为 (O(n^{frac{2}{3}}))

    当然处理 (T^2sumlimits_{d|n}dvarphi(d)mu(T/d)) 的前缀和可以先求出 (d^3varphi(d))(d^2mu(d)) 的前缀和,再用 ((1.3.1)) 算。

    但这样单是这里就要做 (3) 次杜教筛,上面的方法只用两次。

    (3. ext{Powerful Number})

    这本质上杜教筛的一个优化,在一些杜教筛难以单独解决时能很好化解。

    假设要求 (sumlimits_{i=1}^{n}f(i)) ,其基本原理就是构造 (f=h imes g) ,则有:

    (sumlimits_{k=1}^{n}f(k)=sumlimits_{k=1}^{n}sumlimits_{d|k}h(d)g(n/d)=sumlimits_{d=1}^{n}h(d)sumlimits_{k=1}^{leftlfloor frac{n}{d} ight floor}g(k)) 也就是 ((1.3.2))

    但如果 (f) 能满足 (h(p)=0) ,就能有一个很妙的事情。

    那就是若 (n=p_1^{alpha_1}p_2^{alpha_2}dots p_k^{alpha_k})(h(n)) 仅在 (mathop{forall}limits_{1leq ileq k}alpha_igeq 2) 时有值。

    这些 (n) 被称为 ( ext{Powerful Number}) ,简称 ( ext{PN}) ,它 (leq N) 的个数仅有 (O(sqrt N))

    这是因为所有 ( ext{PN}) 都能写成 (a^2b^3) 的形式。

    这只需将出现奇数次的质数 (p_i^{alpha_i},2|alpha_i)(p_i^3) 并到 (b) 中,那剩余的就是平方数并到 (a) 中即可。

    ( ext{PN}) 的个数就是:

    [displaystyle Oleft(int_{1}^{sqrt n}sqrt[3]{dfrac{n}{a^2}}mathrm{d}a ight)=Oleft(sqrt[3] ndisplaystyle int_{1}^{sqrt n}a^{-frac{2}{3}}mathrm{d}a ight)=Oleft(sqrt[3]n 3a^{frac{1}{3}}Big|_{1}^{sqrt n} ight)=Oleft(sqrt[3] nsqrt[6] n ight)=O(sqrt n) ]

    那再看一下 (g(p)) 的值:(f(p)=h(1)g(p)+h(p)g(1)=g(p))

    所以现实中一般是构造 (g(p)=f(p)) ,然后根据 (f=g imes h) 就能反推出 (h)

    (f(p^k)=sumlimits_{i=0}^{k}g(p^{i})h(p^{k-i})Rightarrow h(p^k)=f(p^k)-sumlimits_{i=1}^{k}g(p^i)h(p^{k-i}))

    那对每个 (leq sqrt n) 质数暴力枚举次数,再按上式处理就能得出 (h(p^k)) 的全部值。

    (kleq log n,pi(n)=Oleft(dfrac{n}{log n} ight)) ,所以时间复杂度为 (Oleft(dfrac{sqrt n}{log n} imes log^2 n ight)=O(sqrt nlog n)),为了存下 (h(p^k)) 的空间复杂度就是 (O(sqrt n))

    当然能求出 (h(p^k)) 的封闭形式,而不要递推,时间复杂度将是 (O(sqrt n))

    那暴力搜出所有 ( ext{PN}) ,再按 (sumlimits_{k=1}^{n}f(k)=sumlimits_{d=1}^{n}h(d)sumlimits_{k=1}^{leftlfloor frac{n}{d} ight floor}g(k)) 求出来。

    接下来要求的就是 (g) 的前缀和,在能杜教筛的时候,由于 (leftlfloordfrac{n}{d} ight floor) 一定是能在杜教筛中被处理出来,所以可以在这里再配合杜教筛求出,时间复杂度将是 (n^{frac{2}{3}})

    (g) 的前缀和能 (O(1)) 求出,时间就可以缩短为 (O(sqrt n))(O(sqrt nlog n)) ,取决于 (h(p^k)) 是否需要递推。

    ( ext{P5325})

    题意:给定积性函数 (f(p^k)=p^k(p^k-1)) ,求 (sumlimits_{k=1}^{n}f(k),nleq 10^{10})

    由于 (f(p)=p(p-1)) 考虑构造 (g(n)=nvarphi(n))

    那由 (h(p^k)=f(p^k)-sumlimits_{i=1}^{k}g(p^i)h(p^{k-i})) 就能推出 (h) 剩下的就是求 (g(n)=nvarphi(n)) 的前缀和,这是易得的。

    于是就能 (O(n^{frac{2}{3}})) 解决。

    loj #6053. 简单的函数

    题意:给定积性函数 (f(p^k)=p operatorname{xor} k) ,求 (sumlimits_{k=1}^{n}f(k),nleq 10^{10})

    由于当 (p eq 2)(f(p)=p-1=varphi(p)) ,而当 (p=2)(f(p)=3(p-1)=3varphi(p))

    由于 (f) 是积性函数,那就可以构造 (g(n)=egin{cases}3varphi(n),2|n\varphi(n), ext{otherwise}end{cases})

    (h) 仍容易以 (h(p^k)=f(p^k)-sumlimits_{i=1}^{k}g(p^i)h(p^{k-i})) 递推。

    剩下要求的就是 (g) 的前缀和。

    (g(n)=varphi(n)+[2|n]2varphi(n)),记 (S(n)=sumlimits_{k=1}^{n}varphi(k),S1(n)=sumlimits_{k=1}^{n}[2|k]varphi(k))

    (sumlimits_{k=1}^{n}g(k)=S(n)+S1(n))

    其中 (S(n)) 是杜教筛容易求的,关键是 (S1(n))

    [S1(n)=sumlimits_{k=1}^{n}[2|k]varphi(k)=sumlimits_{k=1}^{leftlfloorfrac{n}{2} ight floor}varphi(2k)=sumlimits_{k=1}^{leftlfloorfrac{n}{2} ight floor}dfrac{varphi(2)varphi(k)gcd(2,k)}{varphi(gcd(2,k))} ]

    [=sumlimits_{k=1}^{leftlfloorfrac{n}{2} ight floor}dfrac{varphi(k)gcd(2,k)}{varphi(gcd(2,k))}=sumlimits_{k=1}^{leftlfloorfrac{n}{2} ight floor}[2|k]dfrac{varphi(k)2}{varphi(2)}+sumlimits_{k=1}^{leftlfloorfrac{n}{2} ight floor}[2 mid n]dfrac{varphi(k)1}{varphi(1)} ]

    [=2S1(leftlfloorfrac{n}{2} ight floor)+S(leftlfloorfrac{n}{2} ight floor)-S1(leftlfloorfrac{n}{2} ight floor)=S(leftlfloorfrac{n}{2} ight floor)+S1(leftlfloorfrac{n}{2} ight floor) ]

    其中用到了 (varphi(ij)=dfrac{varphi(i)varphi(j)gcd(i,j)}{varphi(gcd(i,j))}) ,这能以 (varphi) 的式子轻松证明出来。

    所以对每个 (S1(m)) 就能 (O(log n)) 求出。

    这是因为需要的 (m=leftlfloordfrac{n}{k} ight floor) ,递推下去每次需要的 (leftlfloordfrac{m}{2} ight floor=leftlfloordfrac{leftlfloordfrac{n}{k} ight floor}{2} ight floor=leftlfloordfrac{n}{2k} ight floor) 是杜教筛 (S) 时必然会处理的。

    而按照预处理前 (n^{frac{2}{3}})(S1) 后要算 (O(n^{frac{1}{3}}))(S1(m)) ,时间为 (O(n^{frac{1}{3}}log n))

    加上 ( ext{PN}) 筛及杜教筛的时间复杂度,总时间为 (O(sqrt nlog n+sqrt[3] nlog n+n^{frac{2}{3}}))

    loj #6682. 梦中的数论

    题意:求 (sumlimits_{i=1}^{n}sumlimits_{j=1}^{n}sumlimits_{k=1}^{n}[j|i][(j+k)|i],nleq 10^{10})

    (f(i)=sumlimits_{j=1}^{i}sumlimits_{k=1}^{i}[j|i][(j+k)|i]) ,则原式为 (f(i)) 的前缀和。

    ([j|i][(j+k)|i]) 相当于从 (i) 的因数中选出两个的方案数,为 (dbinom{sigma_0(i)}{2})

    所以 (f(i)=dbinom{sigma_0(i)}{2}=dfrac{sigma_o(i)^2-sigma_0(i)}{2})

    其中 (sigma_0(i)) 的前缀和是易得的:(sumlimits_{i=1}^{n}sumlimits_{d|i}=sumlimits_{d=1}^{n}leftlfloordfrac{n}{d} ight floor) 一次数论分块即可。

    重点看 (sigma_0(i)^2) 的前缀和,这个积性函数不得不重推 ( ext{dgf}) 来探究。

    为了下文表述方便,设 (f_p(x)=sumlimits_{kgeq 0}sigma(p^k)^2x^k) ,即设对每个质数 (p)(x=p^{-z}) 转为贝尔级数的形式。

    (sigma_0(i)^2)( ext{dgf}) 就是 (prodlimits_{pin ext{Prime}}f_p(p^{-z}))

    由于 (sigma_0(p^k)^2=(k+1)^2)

    所以 (f_p(x)=sumlimits_{kgeq 0}(k+1)^2x^k=sumlimits_{kgeq 0}k^2x^k+sumlimits_{kgeq 0}kx^k+dfrac{1}{1-x})

    由于 (sumlimits_{kgeq 0}a_kx^k=F(x)Rightarrowsumlimits_{kgeq 0}t(k)a_kx^k=t(xmathrm{D})F(x)) ,其中 (xmathrm D) 代表对原式求导后乘 (x) 的算子,(t) 是一个多项式。

    这用第二类 ( ext{Stirling Numbers})(t(k)) 每一项转为下降幂,再用具体数学的习题 ((6.13)) 容易证明。

    所以

    [f_p(x)=(xmathrm{D})^2dfrac{1}{1-x}+2(xmathrm D)dfrac{1}{1-x}+dfrac{1}{1-x} ]

    [=(xmathrm{D})dfrac{x}{(1-x)^2}+dfrac{2x}{(1-x)^2}+dfrac{1}{1-x} ]

    [=xdfrac{(x^2-2x+1)-(2x-2)x}{(1-x)^4}+dfrac{2x}{(1-x)^2}+dfrac{1}{1-x} ]

    [=xdfrac{1-x+2x}{(1-x)^3}+dfrac{2x}{(1-x)^2}+dfrac{1}{1-x} ]

    [=dfrac{x+x^2+2x-2x^2+x^2-2x+1}{(1-x)^3}=dfrac{1+x}{(1-x)^3} ]

    这式子十分简洁,于是 (sigma_0(i)^2)( ext{dgf}) 就是:

    [prodlimits_{pin ext{Prime}}dfrac{1+p^{-z}}{(1-p^{-z})^3}=prodlimits_{pin ext{Prime}}dfrac{1-p^{-2z}}{(1-p^{-z})^4}=dfrac{zeta(z)^4}{zeta(2z)} ]

    这可以看做 (zeta(z)^4 imes dfrac{1}{zeta(2z)}) ,而 (zeta(2z)=prodlimits_{pin ext{Prime}}1-p^{-2z}) 仅在分解后各个质数次幂为 (2) 的数中有值。

    所以 (dfrac{1}{zeta(2z)}) 仅在 ( ext{PN}) 中的一部分中有值,个数小于 (sqrt n) ,能直接搜出来。

    剩下的就是求 (zeta(z)^4) 的前缀和,可以杜教筛。

    这相当于 (zeta(z)^2) 与自身的卷积,而为了求出 (zeta(z)^2) 需要 (zeta(z)) 与自身的卷积。

    (zeta(z)^2)(zeta(z)) 需要的仅是 (leftlfloordfrac{n}{k} ight floor) 处的 (O(sqrt n)) 个值,在预处理出前 (n^{frac{2}{3}}) 的前缀和后用杜教筛的时间复杂度是 (O(n^{frac{2}{3}}))

    由于我比较懒,在处理前 (n^{frac{2}{3}})(zeta(z)^2,zeta(z)^4) 的前缀和时直接用了 ( ext{P5495}) 的方法多一个 (lnln n) 算。

    那这样预处理的范围可以适当调整一下。

    总时间复杂度是 (O(n^{frac{2}{3}}lnln n))(O(n^{frac{2}{3}})) ,取决于是否线性筛。

    但即使是 (O(n^{frac{2}{3}}lnln n)) 的方法在 ( ext{loj}) 上也能跑的十分快,不可思议地快过了一部分 ( ext{Min25}) 筛。

  • 相关阅读:
    Nginx 部署多个 web 项目(虚拟主机)
    Nginx 配置文件
    Linux 安装 nginx
    Linux 安装 tomcat
    Linux 安装 Mysql 5.7.23
    Linux 安装 jdk8
    Linux 安装 lrzsz,使用 rz、sz 上传下载文件
    springMVC 拦截器
    spring 事务
    基于Aspectj 注解实现 spring AOP
  • 原文地址:https://www.cnblogs.com/Y-B-X/p/15414706.html
Copyright © 2011-2022 走看看