• 莫比乌斯反演题目整理


    1.YY的gcd

    题意:给定(N, M),求

    [sumlimits_{i = 1}^Nsumlimits_{j = 1}^N[gcd(i,j)=k](kin Prime) ]

    先规定:本文中的(frac{a}{b})表示(lfloor frac{a}{b} floor)(因为我懒)

    不妨设(N<M)

    首先,显然原式可以写成这个形式:

    [sumlimits_{k = 1,kin Prime}^{N}sumlimits_{i = 1}^Nsumlimits_{j = 1}^M[gcd(i,j)=k] ]

    我们设:

    [mathbf{f}(k)=sumlimits_{i = 1}^Nsumlimits_{j = 1}^M[gcd(i,j)=k] ]

    [mathbf{F}(n)=sumlimits_{n|k}mathbf{f}(k) ]

    也就是(mathbf{f}(k))表示(gcd(i, j)=k)的数的个数,(mathbf{F}(k))表示(gcd(i, j)=d imes k(din N_+))的数的个数

    由定义可知:

    [mathbf{F}(n)=frac{N}{n}frac{M}{n} ]

    因为(mathbf{F}(k))表示(gcd(i, j)=d imes k(din N_+))的数的个数,那么(i,j)必须要同时包含(k)这个因子

    那么由莫比乌斯反演公式得:

    [mathbf{f}(n) = sumlimits_{n|k}mu(frac{k}{n})mathbf{F}(k) ]

    直接代入:

    [sumlimits_{k = 1,kin Prime}^{N}sumlimits_{i = 1}^Nsumlimits_{j = 1}^M[gcd(i,j)=k]\=sumlimits_{k = 1,kin Prime}^{N}f(k)\=sumlimits_{k = 1,kin Prime}^{N}sumlimits_{k|d}mu(frac{d}{k})mathbf{F}(d)\ ]

    换成枚举(frac{d}{k})

    [=sumlimits_{k = 1,kin Prime}^{N}sumlimits_{d=1}^{frac{N}{k}}mu(d)mathbf{F}(dk)\ ]

    (mathbf{F}(dk))替换得到:

    [=sumlimits_{k = 1,kin Prime}^{N}sumlimits_{d=1}^{frac{N}{k}}mu(d)frac{N}{dk}frac{M}{dk} ]

    (dk=p)

    [=sumlimits_{p=1}^{N}sumlimits_{k|p,kinPrime}mu(frac{p}{k})frac{N}{p}frac{M}{p} ]

    显然后面两项和(k)无关,可以提出来

    [=sumlimits_{p=1}^{N}frac{N}{p}frac{M}{p}sumlimits_{k|p,kin Prime}mu(frac{p}{k}) ]

    多组数据整除分块+线性筛就可以了

    void pre()
    {
    	mu[1] = 1;
    	for(int i = 2; i <= N - 1; i ++)
    	{
    		if(!flag[i]) pri[++cnt] = i, mu[i] = -1;
    		for(int j = 1; j <= cnt && i * pri[j] <= N - 1; j ++)
    		{
    			flag[i * pri[j]] = 1;
    			if(i % pri[j] == 0) break;
    			mu[i * pri[j]] = -mu[i];
    		} 
    	}
    	for(int i = 1; i <= cnt; i ++)
    	{
    		for(int j = 1; j * pri[i] <= N; j ++)
    		{
    			f[j * pri[i]] += mu[j];
    		}
    	}
    	for(int i = 1; i <= N ; i ++) sum[i] = sum[i - 1] + f[i];
    }
    
    ll solve(int a, int b)
    {
    	ll ans = 0;
    	for(int l = 1, r = 0; l <= a; l = r + 1)
    	{
    		r = min(a / (a / l), b / (b / l));
    		ans += (ll)(sum[r] - sum[l - 1]) * (a / l) * (b / l);
    	}
    	return ans;
    }
    

    2.[SDOI2015]约数个数和

    题意:设(d(x))(x)的约数个数,给定(n,m),求

    [sumlimits_{i=1}^{n}sumlimits_{j=1}^md(ij) ]

    有一个玄学公式:

    [d(ij)=sumlimits_{x|i}sumlimits_{y|i}[gcd(x,y)=1] ]

    (感性理解)

    我们要求:

    [sumlimits_{i=1}^{n}sumlimits_{j=1}^msumlimits_{x|i}sumlimits_{y|i}[gcd(x,y)=1] ]

    按照套路把后面的提前

    [sumlimits_{i=1}^{n}sumlimits_{j=1}^mlfloorfrac{n}{i} floorlfloorfrac{m}{j} floor[gcd(i,j)=1] ]

    接着按照套路反演

    [f(x)=sumlimits_{i=1}^{n}sumlimits_{j=1}^mlfloorfrac{n}{i} floorlfloorfrac{m}{j} floor[gcd(i,j)=t] ]

    [g(x)=sumlimits_{x|d}f(d) ]

    [g(x)=sumlimits_{i=1}^{n}sumlimits_{j=1}^mlfloorfrac{n}{i} floorlfloorfrac{m}{j} floor[x|gcd(i,j)] ]

    3.[POI2007]ZAP-Queries

    咕咕咕

  • 相关阅读:
    Asp.net中导出Excel文档(Gridview)
    以太坊难度炸弹是什么?极大抑制矿工继续以POW方式挖矿!
    Solidity语言基础 和 Etherum ERC20合约基础
    BCH/BSV coin split troubleshooting
    比特币学习-Transaction的locktime属性
    在BCH硬分叉后防止重放攻击-2
    在BCH硬分叉后防止重放攻击-1
    区块链硬分叉-软分叉简单了解
    BTC和BCH 区别和联系?
    BCHABC/BCHSV的矛盾所在
  • 原文地址:https://www.cnblogs.com/lcezych/p/12157353.html
Copyright © 2020-2023  润新知