zoukankan      html  css  js  c++  java
  • 模板

    最后是看https://blog.csdn.net/litble/article/details/72804050才懂示例1的,结果示例2推不出来,说明我是乱搞的?

    什么乱起八糟的。https://blog.csdn.net/litble/article/details/79509373根据我们做莫比乌斯反演题的经验,枚举gcd的值?

    https://blog.csdn.net/ControlBear/article/details/77839443

    数论分块?杜教筛?

    https://www.cnblogs.com/phile/p/4474087.html

    https://www.cnblogs.com/pdev/category/682194.html

    狄利克雷卷积

    https://blog.csdn.net/a574780196/article/details/82932986


    莫比乌斯函数的性质:

    当x有偶数个不同的质因子,mux=1,奇数个不同的,mu=-1,存在质因子的平方,0。

    $sumlimits_{d|n}{frac{mu(d)}{d}}=frac{varphi(n)}{n}$


    莫比乌斯函数线性筛:

    void mobius() {
        int i,j;
        mbs[1] = 1;
        fo(i,2,N) {
            if (!vis[i]) {
                p[++p[0]] = i;
                mbs[i] = -1;
            }
            for (j = 1; j <= p[0] && i * p[j] <= N; j++) {
                vis[i*p[j]] = 1;
                if (i % p[j] == 0) {
                    mbs[i*p[j]] = 0;
                    break;
                }
                mbs[i*p[j]] = - mbs[i];
            }
        }
    }
    void get_mu(int n)
    {
        mu[1]=1;
        for(int i=2;i<=n;i++)
        {
            if(!vis[i]){prim[++cnt]=i;mu[i]=-1;}
            for(int j=1;j<=cnt&&prim[j]*i<=n;j++)
            {
                vis[prim[j]*i]=1;
                if(i%prim[j]==0)break;
                else mu[i*prim[j]]=-mu[i];
            }
        }
     }

    莫比乌斯反演:

    因数有关的:

    $F(n) = sumlimits_{d|n}f(d)$

    可以得

    $f(d) = sumlimits_{d|n}mu(d)F(frac{n}{d})$

    倍数有关的(常用):

    $F(n) = sumlimits_{n|d}f(d)$

    可以得

    $f(n) = sumlimits_{n|d}mu(frac{d}{n})F(d)$


    示例:

    1.经典问题 求 $f(x)=sumlimits_{i=1}^{n}sumlimits_{j=1}^{m}[gcd(i,j)==x]$ :

    反演对: $F(x) = sumlimits_{x|d}f(d) = sumlimits_{k=1}f(kx) =sumlimits_{k=1}sumlimits_{i=1}^{n}sumlimits_{j=1}^{m}[gcd(i,j)==kx] = {lfloor{frac{n}{x}}} floor{lfloor{frac{m}{x}} floor}$ (只要 $i,j$ 都是 $x$ 的倍数, $gcd(i,j)$ 一定是某个 $x$ 的 $k$ 倍)

    答案: $f(x) = sumlimits_{x|d}mu(frac{d}{x})F(d) = sumlimits_{k=1}mu(k)F(kx) = sumlimits_{k=1}mu(k){lfloor{frac{n}{kx}}} floor{lfloor{frac{m}{kx}} floor}$

    当 $kx>min(n,m)$ 的时候 $f(kx)=0$ (gcd的上界)。

    2.求 $f = sumlimits_{i=1}^{n}sumlimits_{j=1}^{m}gcd(i,j)$ :

    答案:$sumlimits_{i=1}^{n}sumlimits_{j=1}^{m}gcd(i,j) = sumlimits_{x=1}^{lfloor{frac{n}{d}} floor}mu(x){lfloor{frac{n}{dx}}} floor{lfloor{frac{m}{dx}} floor}$

    第1题算出 $f_2(x)=sumlimits_{i=1}^{n}sumlimits_{j=1}^{m}[gcd(i,j)==x]$ ,这一次我们要求所有的 gcd 的和,显然所求为 $f = sumlimits_{x=1}xf_2(x)$ 。也就是所有的 gcd 的个数乘上这个gcd本身的值。

    3.求 $f=sumlimits_{i=1}^{n}sumlimits_{j=1}^{m}gcd(i,j)^k$ 

    答案:$sumlimits_{i=1}^{n}sumlimits_{j=1}^{m}gcd(i,j)^k = sumlimits_{d=1}^{n}d^ksumlimits_{x=1}^{lfloor{frac{n}{d}} floor}mu(x){lfloor{frac{n}{dx}}} floor{lfloor{frac{m}{dx}} floor}$

     第1题算出 $f_2(x)=sumlimits_{i=1}^{n}sumlimits_{j=1}^{m}[gcd(i,j)==x]$ ,这一次我们要求所有的 gcd 的k次方,显然所求为 $f=sumlimits_{x=1}^{N}x^kf_2(x)$ 。也就是所有的 gcd 的个数乘上这个 gcd 的 k 次方值。

    4.求给定的 n 个数中有多少个四元组 (a,b,c,d) 的 gcd==1 :

    f(t) = 求给定的 n 个数中有多少个四元组 (a,b,c,d) 的 gcd==t ,

    F(t) = 求给定的 n 个数中有多少个四元组 (a,b,c,d) 的 gcd==kt 。

    那么我们要求 f(1) ,应用倍数公式后,只要快速求解每一个 F(t) 就足够了。由于 k 是任意的,所以 gcd 被我们去掉了,我们只需要求 t 的倍数有m个,然后 $C_m^4$ 就是 F(t)。

  • 相关阅读:
    Jqgrid学习
    【转】SpringMVC 流程图
    【转】spring学习之@SessionAttributes
    【转】HttpSessionListener, HttpSessionAttributeListener的用法
    Java会话(session)管理
    hibernate--一对多xxx.hbm.xm配置
    使用Spring容器
    最简单的hibernate入门、配置
    搭建Struts 2的工作环境
    Struts2的常用标签
  • 原文地址:https://www.cnblogs.com/Yinku/p/10486966.html
Copyright © 2011-2022 走看看