zoukankan      html  css  js  c++  java
  • 洛谷P3768 简单的数学题

    题目大意:

    给定(n),(p),求

    [(sumlimits_{i=1}^{n}sumlimits_{j=1}^{n}ijgcd(i,j))mod p ]

    前置芝士:

    莫比乌斯反演

    [mu*1=e ]

    欧拉反演

    [phi*1=n ]

    杜教筛

    点一下就有啦´ ▽ ` )ノ

    首先我们很习惯地把(gcd)提出来

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

    然后把后面的(x)也提出来,由于(i,j)中少了一个x,所以前面变成(x^3)

    [sumlimits_{x=1}^{n}x^3sumlimits_{i=1}^{lfloorfrac{n}{x} floor}sumlimits_{j=1}^{lfloorfrac{n}{x} floor}ij[gcd(i,j)==1] ]

    对最后一个(sum)进行莫比乌斯反演

    [sumlimits_{x=1}^{n}x^3sumlimits_{i=1}^{lfloorfrac{n}{x} floor}sumlimits_{j=1}^{lfloorfrac{n}{x} floor}ijsumlimits_{d|gcd(i,j)}mu(d) ]

    然后我们把最后一个(sum)提前,枚举因子转枚举倍数

    [sumlimits_{x=1}^{n}x^3sumlimits_{d=1}^{lfloorfrac{n}{x} floor}d^2mu(d)sumlimits_{i=1}^{lfloorfrac{n}{dx} floor}sumlimits_{j=1}^{lfloorfrac{n}{dx} floor}ij ]

    对于最后两个(sum),用等差数列求和可以化简为(frac{x^2(x+1)^2}{4}),我们记做(F(x))

    [sumlimits_{x=1}^{n}x^3sumlimits_{d=1}^{lfloorfrac{n}{x} floor}d^2mu(d)F(lfloorfrac{n}{dx} floor) ]

    然后似乎无法化简了,不过我们在YY的GCD中提到了一种方法:

    (t=dx),则

    [ret=sumlimits_{t=1}^{n}F(lfloorfrac{n}{t} floor)t^2sumlimits_{x|t}mu(frac{t}{x})(x) ]

    最后一个(sum)可以欧拉反演

    [ret=sumlimits_{t=1}^{n}F(lfloorfrac{n}{t} floor)t^2phi(t) ]

    接下来,我们设(f(t)=t^2phi(t))

    [ret=sumlimits_{t=1}^{n}F(lfloorfrac{n}{t} floor)f(t) ]

    我们已经知道(F(i))了,接下来只需要知道(sumlimits_{i=1}^{n}f(i))就可以除法分块了
    显然后面这个东西是个积性函数,我们可以用杜教筛

    也就是说我们要构造可以快速求前缀和的,满足(h=f*g)(h)(g)

    观察(f*g),它等价于

    [sumlimits_{i|x}i^2phi(i)*g(x/i) ]

    它前面的(i^2)令我们无法对(h)快速求前缀和,想办法消掉

    (g(x)=x^2),则

    [h(x)=sumlimits_{i|x}i^2phi(i)*(x/i)^2=x^2sumlimits_{i|x}phi(i) ]

    这个(sum)仍然可以用欧拉反演,得到

    [h(x)=x^3 ]

    然后运用小学奥数(雾),就可以得知

    [sumlimits_{i=1}^{n}h(i)=frac{x^2(x+1)^2}{4} ]

    然后套下杜教筛,得到

    [g(1)S(n)=sumlimits_{i=1}^{n}h(i)-sumlimits_{i=2}^{n}g(i)S(lfloorfrac{n}{i} floor) ]

    然后就可以快速求出(f(i))的前缀和,进行除法分块了

    复杂度(O()能过())

    (貌似要用微积分,我自己推的复杂度好像不太对……

    然后我们就做完了这道莫比乌斯反演题目,但是它为什么叫简单的数学题呢???

    我们再看看题目

    [(sumlimits_{i=1}^{n}sumlimits_{j=1}^{n}ijgcd(i,j))mod p ]

    然后再看看这个

    [phi*1=n ]

    然后欧拉反演一下

    [sumlimits_{i=1}^{n}sumlimits_{j=1}^{n}ijsumlimits_{k|gcd(i,j)}phi(k) ]

    (k)扔前面

    [sumlimits_{k=1}^{n}phi(k)*k^2sumlimits_{i=1}^{lfloorfrac{n}{k} floor}sumlimits_{j=1}^{lfloorfrac{n}{k} floor}ij ]

    发现后面两项可以化简

    [sumlimits_{k=1}^{n}phi(k)*k^2sumlimits_{i=1}^{lfloorfrac{n}{k} floor}i^3 ]

    然后继续套个杜教筛就好了(qwq)

    这样就对得起它的题目名字了

    但是上面莫比乌斯反演方法的各种套路都很经典,也值得一看

  • 相关阅读:
    MySQL之数据的备份与还原
    调用、查看、修改、删除存储过程和函数
    变量的使用、游标的使用、流程控制的使用
    存储过程与函数
    elementUI 表格设置表头样式
    oracle先排序再分页
    postgresql行转列
    crosstab(unknown, unknown) does not exist
    sublime安装php_beautifier来格式化PHP代码
    从今天开始我要经常更新博客
  • 原文地址:https://www.cnblogs.com/knife-rose/p/12019369.html
Copyright © 2011-2022 走看看