zoukankan      html  css  js  c++  java
  • SP20173 DIVCNT2

    Refer

    主要思路参考了 Command_block 的题解。

    Description

    给定 (n)((nle 10^{10})),求

    [sum_{i=1}^nsigma_0(i^2) mod 2^{64} ]

    Solution

    首先有一个惯例套路:

    [sigma_0(icdot j)=sum_{x|i}sum_{y|j}left[gcd(x,y)=1 ight] ]

    [SDOI2015]约数个数和 以及 BZOJ4176 Lucas的数论 中,我们将这个式子继续化成如下模样,就可以做了:

    [sigma_0(icdot j)=sum_{t|i,t|j}mu(t)cdot dleft(frac{i}{t} ight)cdot dleft(frac{j}{t} ight) ]

    最后的结果长这样:(然后就可以杜教筛了)

    [sum_{i=1}^nsum_{j=1}^nd(icdot j)=sum_{t=1}^nmu(t)cdotleft(sum_{i=1}^{left[frac{n}{t} ight]}d(i) ight)^2 ]

    但是这题的这样算结果长这样:

    [sum_{i=1}^nd(i^2)=sum_{t=1}^nmu(t)cdotleft(sum_{i=1}^{left[frac{n}{t} ight]}d(i)^2 ight) ]

    这就不太能做。可见,思维僵化的推导方法有时根本行不通。考虑不反演,直接先枚举 (x)(y)

    [sum_{i=1}^nsigma_0(i)=sum_{i=1}^nsum_{x|i}sum_{y|i}left[gcd(x,y)=1 ight]=sum_{x=1}^nsum_{y=1}^n[gcd(x,y)=1]cdot left(sum_t[x|t,y|t,tle n] ight) ]

    因为 (x)(y) 互质,所以 (sum[x|t,y|t,tle n]=left[frac{n}{xy} ight]),这就是个比较简洁的式子了:

    [sum_{i=1}^nsigma_0(i)=sum_{x=1}^nsum_{y=1}^n[gcd(x,y)=1]cdotleft[frac{n}{xy} ight] ]

    这时摆在我们面前的最常见的做法是把 (gcd(x,y)=1) 拆开来,但是这回,常见的套路并没有成功。我们需要的是一种全新的方法——构造另一个函数并使用反演公式。设:

    [f(n,t)=sum_{x=1}^nsum_{y=1}^n[gcd(x,y)=t]cdotleft[frac{n}{xy} ight] ]

    [F(n,t)=sum_{x=1}^nsum_{y=1}^n[t|gcd(x,y)]cdotleft[frac{n}{xy} ight] ]

    于是得到:

    [F(n,t)=sum_{k=1}^{+infty}f(n,kt) Rightarrow f(n,t)=sum_{k=1}^{+infty}mu(k)cdot f(n,kt) ]

    我们要求的答案是 (f(n,1))。考虑怎么推这个 (F),接下来按套路走就可以辣:

    [F(n,t)=sum_{T=1}^n left[frac{n}{T} ight]sum_{x|T}left[t|gcd(T,frac{T}x) ight] ]

    仔细看就可以发现 (t|x,t^2|T),可以得到:

    [F(n,t)=sum_{T=1}^{left[frac{n}{t^2} ight]}left[frac{n}{Tt^2} ight]cdot d(T) ]

    总的式子就是:

    [sum_{i=1}^nsigma_0(i)=sum_{t=1}^{sqrt n}mu(t)sum_{T=1}^{left[frac{n}{t^2} ight]}left[frac{n}{Tt^2} ight]cdot d(T) ]

    (d) 的前缀和可以用类似杜教筛的方法得到,前面的部分,假设第二个求和它是除以 (t) (往大了放缩) 的时候复杂度可以分析出是和杜教筛一样的,于是总复杂度就是 (O(n^{frac{2}{3}}))

    Code

    在 vjudge 上交过了,洛谷还在 Waiting。

    as 0.4123
  • 相关阅读:
    投影变换 到 uv坐标 xy/w 齐次坐标
    GdiPlus[19]: IGPPathGradientBrush 之 SetCenterPoint
    GdiPlus[21]: IGPPathGradientBrush 之 InterpolationColors
    GdiPlus[24]: IGPPrivateFontCollection: 分别从文件和内存加载字体
    GdiPlus[23]: IGPFontFamily
    GdiPlus[25]: IGPInstalledFontCollection: 获取已安装的字体列表
    GdiPlus[20]: IGPPathGradientBrush 之 SetFocusScales
    GdiPlus[22]: IGPFont
    可爱的 CreateMessageDialog
    GdiPlus[18]: IGPPathGradientBrush 之 CenterColor、SurroundColors
  • 原文地址:https://www.cnblogs.com/Linshey/p/14400959.html
Copyright © 2011-2022 走看看