zoukankan      html  css  js  c++  java
  • Min_25筛学习笔记

    Min_25筛

    例题题面

    (f(x))是一个积性函数,且(f(p^k)=p^k(p^k-1)),求(sum_{i=1}^n f(i)),其中(nleq 10^{10})

    题解

    Min_25筛的基本思想:积性函数(f(p^k))能表示成一个关于(p^k)的多项式,于是可以对每一项分别去处理。在此题中是一个二次的多项式。所以说,我们接下来的过程其实是在求这样一个式子:

    [sum_{i=1}^nf(i),f(p^e)=(p^e)^k ]

    其中的(f)(k)均有别于上面的(f)(k)

    我们考虑将原式分成两部分:

    [egin{aligned} sum_{i=1}^n f(i)&=sum_{1leq p leq n}f(p)+sum_{i∉prime}f(i)\ &=sum_{1leq p leq n}f(p)+sum_{pleqsqrt{n} &p^eleq n}f(p^e)sum_{ileqfrac{n}{p^e}&minp>p}f(i) end{aligned} ]

    其中前面那部分是质数,后面那部分是枚举合数。

    我们先考虑第一部分怎么解决。

    Part1

    我们考虑一个dp:设(g(n,j)),满足:

    [g(n,j)=sum_i[i∈prime||minp>p_j]i^k ]

    其中显然的,(i^k)是一个完全积性函数。

    在此题中,明显的,(k)(1)(2)

    接下来考虑转移,我们可以发现,如果从(g(n,j-1))转移到(g(n,j)),我们就要删掉原本最小质因子是(p_{j})的数,那么就有下面的转移:

    [g(n,j)=g(n,j-1)-p_j^k(g(frac{n}{p_j},j-1)-g(p_{j-1},j-1)) ]

    其中前面那个就是最小质因子是(p_j)的所有数和质数,后面那个就是为了抵消掉质数。

    不难发现,(g(p_{j-1},j-1))即为前(j-1)个质数的(k)次方和,这个可以筛法搞一下,记为(sp_{j-1})

    于是,我们就能求出(1)~(n)中所有质数的k次方和,即为(g(n,x)),其中(x)是满足(p_xleq sqrt n)的最大的(x)。为方便记为(g(n))

    但是你会发现一个事儿,(n)太大,没办法把每一个(g(n))都存下来。但是我们发现,我们需要的(n)都是由(n)除以某个数得到的,不难发现这样的值最多只有(O(sqrt n))种,于是就可以存下来了。

    Part2

    类似地考虑dp,设(S(n,x))(1)(n)中所有最小质因子大于(p_x)的数的函数(即(f))值之和,那么答案就是(S(n,0)+1)。(1为(f(1))的值)

    (S)分成两部分,一部分为质数,一部分为合数,则有:

    [S(n,x)=g(n)-sp_x+sum_{p_k^eleq n&k>x}f(p_k^e)(S(frac{n}{p_k^e},k)+[e eq1]) ]

    前面那一半就是质数,后面的和式就是合数了。这个类似于上面(g)那条式子。后面那个(e eq1)是因为(e=1)的时候在质数里算过了。

    这个式子就可以递归去处理了。

    经典trick

    因为在处理(g)的时候,减去(p_j^k(g(frac{n}{p_j},j-1)-g(p_{j-1},j-1)))意义即为将最小质因数为(p_j)的合数的函数值给去掉,所以这一部分的和就是全部合数的函数值的和。

    例:【51NOD1847】奇怪的数学题

  • 相关阅读:
    坐标系统和投影的来龙去脉原创
    ArcEngine这本书怎么样
    如何构建达芬奇的DSP Server【转】
    ccs编译问题
    linux下环境变量设置[转]
    普通人的编辑利器——Vim 【转】
    关闭linux防火墙
    GT_Trace的使用[z]
    davinciDM6446 LINUX环境配置
    TI DaVinci(达芬奇)入门
  • 原文地址:https://www.cnblogs.com/youddjxd/p/15100914.html
Copyright © 2011-2022 走看看