首页 > 其他分享 >*【莫比乌斯反演】数表[SDOI2014]

*【莫比乌斯反演】数表[SDOI2014]

时间:2024-03-12 15:34:43浏览次数:19  
标签:lfloor frac limits sum rfloor mu 反演 SDOI2014 数表

问题

有一张 \(N\times N\) 的数表(\(N=10^5\)),其第 \(i\) 行第 \(j\) 列(\(1\le i\le n\),\(1\le j\le m\))的数值为能同时整除 \(i\) 和 \(j\) 的所有自然数之和。
有T次询问,每次询问给定 \(n,m,A\),计算数表(1,1)至(n,m)中不大于 \(A\) 的数之和(\(|A|\le 10^9\))。
每组数据输出一行一个整数,表示答案模 \(2^{31}\) 的值。

题解

\(\sum\limits_{i=1}^n\sum\limits_{j=1}^m f(\gcd(i,j)) \lbrack f(\gcd(i,j)) \leq A \rbrack\)
\(f(x)\)表示 \(x\) 所有约数和。                                                      
假设先忽略条件 \(\lbrack f(\gcd(i,j)) \leq A \rbrack\) 的限制
设 \(n \leq m\)
\(\sum\limits_{i=1}^n\sum\limits_{j=1}^m f(\gcd(i,j))\) 111
\(=\sum\limits_{d=1}^n \sum\limits_{i=1}^{\frac{n}{d}}\sum\limits_{j=1}^{\frac{m}{d}} f(d)\lbrack\gcd(i,j)=1\rbrack\) 222
\(=\sum\limits_{d=1}^n f(d)\sum\limits_{i=1}^{\frac{n}{d}}\sum\limits_{j=1}^{\frac{m}{d}}\sum\limits_{a|\gcd(i,j)}\mu(a)\) 333
\(=\sum\limits_{d=1}^n f(d) \sum\limits_{i=1}^{\frac{n}{d}}\sum\limits_{j=1}^{\frac{m}{d}}\sum\limits_{a=1}^{\frac{n}{d}} \lbrack a|i \rbrack \lbrack a|j \rbrack \mu(a)\) 444
\(=\sum\limits_{d=1}^n f(d) \sum\limits_{a=1}^{\frac{n}{d}}\mu(x)\sum\limits_{i=1}^{\frac{n}{d}}\lbrack a|i \rbrack\sum\limits_{j=1}^{\frac{m}{d}}\lbrack a|j \rbrack\) 555
\(=\sum\limits_{d=1}^n f(d) \sum\limits_{a=1}^{\frac{n}{d}}\mu(a)\lfloor\frac{n}{ad}\rfloor\lfloor\frac{n}{ad}\rfloor\) 666注:到此为止,如果不进一步优化,结果50分超时。
设 \(T=ad\) 777
\(=\sum\limits_{d=1}^n f(d) \sum\limits_{\frac{T}{d}=1}^{\frac{n}{d}}\mu(\frac{T}{d})\lfloor \frac{n}{T} \rfloor\lfloor \frac{n}{T} \rfloor\) 888
\(=\sum\limits_{d=1}^n f(d) \sum\limits_{T=1}^n\mu(\frac{T}{d})\lfloor \frac{n}{T} \rfloor \lfloor \frac{n}{T} \rfloor\) 999
\(=\sum\limits_{T=1}^n \lfloor \frac{n}{T} \rfloor \lfloor \frac{n}{T} \rfloor \sum\limits_{d|T}f(d) \mu(\frac{T}{d})\) 设 \(F(T)=\sum\limits_{d|T}f(d) \mu(\frac{T}{d})\) ,可以前缀和
发现当 \(f(d) \leq A\)时才会对 \(F(T)\) 做贡献。于是我们将询问按\(A\)从小到大排序,枚举询问的时候,\(A\)变大会使得一些f(d)对F(T)产生贡献,我们就用枚举倍数的方法来找到所有的T,然后我们需要动态修改F(T)的值,而且还要支持区间询问,因此我们使用常数较小的树状数组实现
初始化代码如下:
F[0]=0;
for(int i=1;i<=N;i++)
       for(int j=i;j<=N;j+=i)
               F[j]+=mu[j/i]*f[i];
\(=\sum\limits_{T=1}^n \lfloor \frac{n}{T} \rfloor \lfloor \frac{n}{T} \rfloor F(T)\)

具体代码如下:

#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int N=2e6;
int pr, p[N+10];LL mu[N+10],F[N+10];bool v[N+10];
void init()
{
    memset(v, 0, sizeof(v));
    pr=0;mu[0]=0;mu[1]=1;
    for(int i=2;i<=N;i++)
    {
        if(!v[i]) p[++pr]=i, mu[i]=-1; 
        for(int j=1;j<=pr&&p[j]*i<=N;j++)
        {
            v[i*p[j]]=true;
            if(i%p[j]==0) {mu[i*p[j]]=0; break;}
            mu[i*p[j]]=-mu[i];
        }
    }
    F[0]=0;
    for(int i=1;i<=N;i++)for(int j=i;j<=N;j+=i)
        F[j]+=mu[j/i]*i;
    for(int i=1;i<=N;i++)F[i]+=F[i-1];
}
LL calc(LL n)
{
    LL ans=0;
    for(LL l=1,r;l<=n;l=r+1)
    {
        r=n/(n/l);
        ans+=(F[r]-F[l-1])*(n/l)*(n/l);
    }
    return ans;
}
int main()
{
    init();
    int T;scanf("%d",&T);
    while(T--)
    {
        LL n;scanf("%lld",&n);
        printf("%lld\n",calc(n));
    }
    return 0;
}

标签:lfloor,frac,limits,sum,rfloor,mu,反演,SDOI2014,数表
From: https://www.cnblogs.com/scyjcp/p/18068417

相关文章

  • 3101: *【莫比乌斯反演:练习】gcd(i,j)=k的对数[POI2007]ZAP-Queries
    问题给出\(n,m,k\)(\(1\leqn,m,k\leq10^5\)),求\(\sum\limits_{i=1}^n\sum\limits_{j=1}^m\lbrack\gcd(i,j)=k\rbrack\),即:满足\(1\leqi\leqn\),\(1\leqj\leqm\),且\(\gcd(i,j)=k\)的二元组\((i,j)\)的数量。题解\(\sum\limits_{i=1}......
  • 2024 年春节集训 _ 第三课 - 莫比乌斯反演
    练习\(5\)\(\color{orange}{\texttt{E->link}}\)求\[\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\]\(n,m\leq10^7,\T\leq10^4\)贴个照片。及其丑陋的照片(我的草稿)如上化简最后可以得到\[\sum_{d=1}^nd\sum_{k=1}^{\left[\dfrac{n}{d}\right]}\mu(k)k^2......
  • 2024 年春节集训 _ 第二课 - 莫比乌斯反演
    练习\(5\)\(\color{orange}{\texttt{E->link}}\)求\[\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\]\(n,m\leq10^7,\T\leq10^4\)贴个照片。及其丑陋的照片(我的草稿)如上化简最后可以得到\[\sum_{d=1}^nd\sum_{k=1}^{\left[\dfrac{n}{d}\right]}\mu(k)k^2\......
  • 单位根反演小记
    核心式子\[[k|n]=\dfrac1k\sum_{i=0}^{k-1}\omega_k^{i\cdotn}\]证明:当\(n\)是\(k\)的因数时,\(\dfrac1k\sum\limits_{i=0}^{k-1}\omega_k^{i\cdotn}=\dfrac1k\sum\limits_{i=0}^{k-1}\omega_k^0=\dfrac1k\cdotk=1\)当\(n\)不是\(k\......
  • SDOI2014重建-矩阵树定理、概率
    link:https://www.luogu.com.cn/problem/P3317给一张无向图,每条边有一定概率连通,问整张图恰好构成一棵\(n\)个点的树的概率。输出实数。\(1<n\leq50\)这种问题通常会试着写出来:\[ans=\sum_{T}(\prod_{e\inT}p_e)(\prod_{e\not\inT}(1-p_e))=\prod_{e\inE}(1-p_e)\su......
  • 莫比乌斯反演
    积性函数:若函数\(f(x)\)满足:\(f(1)=1\)且\(∀x,y∈N_+,\gcd(x,y)=1\)都有\(f(xy)=f(x)f(y)\),则称它为积性函数。若函数\(f(x)\)满足:\(f(1)=1\)且\(∀x,y∈N_+\)都有\(f(xy)=f(x)f(y)\),则称它为完全积性函数。性质:若\(f(x),g(x)\)均为积性函数,那么则以下函数也为......
  • 莫比乌斯反演学习笔记
    莫比乌斯反演目录莫比乌斯反演反演公式&性质例题[HAOI2011]ProblembYY的GCD于神之怒加强版Crash的数字表格/JZPTAB[SDOI2014]数表[SDOI2015]约数个数和反演公式&性质\[f(n)=\sum_{d|n}g(d)\\g(n)=\sum_{d|n}\mu(d)f(\fracnd)\]感觉我不太会用上面那个我只会用莫比乌斯函......
  • 【数论】卷积反演大集合
    不知道为啥脑抽要学数论,骂声一片中发现数论还没入门(悲)。1.狄利克雷卷积与数论函数1.1数论函数定义:数论函数为值域为整数的函数。简单数论函数:\(I(n)\),恒等函数,恒等为\(1\)。\(e(n)\),元函数,卷积中的单位元,若\(n=1\),\(e(n)=1\)。否则为\(e(n)=0\)。\(id(n)\),单位函数,\(......
  • 数据是用二进制数表示的
    提到计算机,可定会想到二进制。为什么计算机要是用二进制?本章就是来学习二进制的。计算机的内部是由IC【集成电路的简称】这种电子部件构成的,而二进制并不是专门为了计算机而发明的,计算机使用二进制只是与IC的特性相符合。二进制数的位数就是8的倍数【这是因为计算机处理信息的基......
  • 《程序是怎样跑起来的》——第2章 数据使用二进制数表示的
    一、程序的运行机制与二进制数的关系1、程序的运行机制:要想对程序的运行机制形成一个大致印象,就要了解信息(数据)在计算机内部是以怎样的形式来表现的,又是以怎样的方法进行运算的。2、二进制数的作用:在C和Java等高级语言编写的程序中,数值、字符串和图像等信息在计算机内部都是......