这道题我们要求的是

\[\sum_{i=1}^N\sum_{j=1}^Mlcm(i,j)
\]

总所周知\(lcm\)的性质不如\(gcd\)优雅,但是唯一分解定理告诉我们\(gcd(i,j)\times lcm(i,j)=i\times j\)

所以很容易的可以转化成这个柿子

\[\sum_{i=1}^N\sum_{j=1}^M\frac{i\times j}{(i,j)}
\]

现在开始套路了

先设两个函数

\[f(n)=\sum_{i=1}^N\sum_{j=1}^M[(i,j)==n]\times i\times j
\]

\[F(n)=\sum_{i=1}^N\sum_{j=1}^M[n|(i,j)]\times i\times j
\]

\[=\frac{n\times(\left \lfloor \frac{N}{n}\right \rfloor+1)\times \left \lfloor \frac{N}{n} \right \rfloor}{2}\times\frac{n\times(\left \lfloor \frac{M}{n}\right \rfloor+1)\times \left \lfloor \frac{M}{n} \right \rfloor}{2}
\]

显然则有

\[F(n)=\sum_{n|d}f(d)
\]

反演得

\[f(n)=\sum_{n|d}\mu(\frac{d}{n})F(d)
\]

于是答案就是

\[Ans=\sum_{i=1}^N\frac{f(i)}{i}
\]

\[=\sum_{i=1}^N\times\frac{1}{i}\sum_{i|d}\mu(\frac{d}{i})\frac{d\times(\left \lfloor \frac{N}{d}\right \rfloor+1)\times \left \lfloor \frac{N}{d} \right \rfloor}{2}\times\frac{d\times(\left \lfloor \frac{M}{d}\right \rfloor+1)\times \left \lfloor \frac{M}{d} \right \rfloor}{2}
\]

后面的一大坨东西真是太烦人了,搞到前面来

\[Ans=\sum_{d=1}^N\frac{(\left \lfloor \frac{N}{d}\right \rfloor+1)\times \left \lfloor \frac{N}{d} \right \rfloor\times(\left \lfloor \frac{M}{d}\right \rfloor+1)\times \left \lfloor \frac{M}{d} \right \rfloor}{4}\sum_{i|d}\frac{\mu(\frac{d}{i})\times d^2}{i}
\]

于是我们可以用\(\Theta(n \ln n)\)来求出\(\sum_{i|d}\frac{\mu(\frac{d}{i})\times d^2}{i}\)之后前缀和

于是有了一个\(70\)分的代码


#include<iostream>
#include<cstring>
#include<cstdio>
#define re register
#define maxn 10000005
#define LL long long
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
const LL mod=20101009;
int n,m;
int f[maxn],p[maxn>>2];
LL pre[maxn];
int main()
{
scanf("%d%d",&n,&m);
if(n>m) std::swap(n,m);
f[1]=pre[1]=1;
for(re int i=2;i<=n;i++)
{
if(!f[i]) p[++p[0]]=i,pre[i]=(1-i+mod);
for(re int j=1;j<=p[0]&&p[j]*i<=n;j++)
{
f[p[j]*i]=1;
if(i%p[j]==0)
{
pre[i*p[j]]=pre[i];
break;
}
pre[p[j]*i]=pre[p[j]]*pre[i]%mod;
}
}
for(re int i=1;i<=n;i++) pre[i]=(i*pre[i]%mod+pre[i-1])%mod;
LL ans=0;
for(re LL l=1,r;l<=n;l=r+1)
{
r=min(n/(n/l),m/(m/l));
LL N=n/l,M=m/l;
ans=(ans+((N+1)*N/2%mod)*((M+1)*M/2%mod)%mod*(pre[r]-pre[l-1]+mod)%mod)%mod;
}
printf("%lld\n",ans);
return 0;
}

显然不行

我们设\(T=\frac{d}{i}\)

那么

\[\sum_{i|d}\frac{\mu(\frac{d}{i})\times d^2}{i}=d\times\sum_{T|d}\mu(T)\times T
\]

定义\(h(x)=\sum_{T|x}\mu(T)\times T\)

会发现\(h\)是一个积性函数,可以考虑如何线筛

首先\(x\)是质数\(h(x)=1-x\)

互质的话可以直接乘起来

如果不互质的话需要好好考虑一下了

仔细思考一下这个\(h\)的含义,会发现有一些约数\(T\)是没有用的,就是那些\(\mu(T)=0\)的约数

而线筛的时候一旦\(i\%p[j]==0\),说明\(p[j]\)在\(i\)中出现过,于是\(p[j]\)并不能组成一些新的有用约数,函数值和\(h(i)\)相比其实没有什么变化,所以就有

\[h(p[j]*i)=h(i)
\]

于是现在的答案变成了

\[Ans=\sum_{d=1}^N\frac{(\left \lfloor \frac{N}{d}\right \rfloor+1)\times \left \lfloor \frac{N}{d} \right \rfloor\times(\left \lfloor \frac{M}{d}\right \rfloor+1)\times \left \lfloor \frac{M}{d} \right \rfloor}{4}\times d\times h(d)
\]

于是直接求\(d\times h(d)\)的前缀和就好了

代码


#include<iostream>
#include<cstring>
#include<cstdio>
#define re register
#define maxn 10000005
#define LL long long
#define min(a,b) ((a)<(b)?(a):(b))
#define max(a,b) ((a)>(b)?(a):(b))
const LL mod=20101009;
int n,m;
int f[maxn],p[maxn>>2];
LL pre[maxn];
int main()
{
scanf("%d%d",&n,&m);
if(n>m) std::swap(n,m);
f[1]=pre[1]=1;
for(re int i=2;i<=n;i++)
{
if(!f[i]) p[++p[0]]=i,pre[i]=(1-i+mod);
for(re int j=1;j<=p[0]&&p[j]*i<=n;j++)
{
f[p[j]*i]=1;
if(i%p[j]==0)
{
pre[i*p[j]]=pre[i];
break;
}
pre[p[j]*i]=pre[p[j]]*pre[i];
}
}
for(re int i=1;i<=n;i++) pre[i]=(i*pre[i]%mod+pre[i-1])%mod;
LL ans=0;
for(re LL l=1,r;l<=n;l=r+1)
{
r=min(n/(n/l),m/(m/l));
LL N=n/l,M=m/l;
ans=(ans+((N+1)*N/2%mod)*((M+1)*M/2%mod)%mod*(pre[r]-pre[l-1]+mod)%mod)%mod;
}
printf("%lld\n",ans);
return 0;
}

【[国家集训队]Crash的数字表格 / JZPTAB】的更多相关文章

  1. 洛谷 P1829 [国家集训队]Crash的数字表格 / JZPTAB 解题报告

    [国家集训队]Crash的数字表格 / JZPTAB 题意 求\(\sum\limits_{i=1}^n\sum\limits_{j=1}^mlcm(i,j)\),\(n,m\le 10^7\) 鉴于 ...

  2. [Luogu P1829] [国家集训队]Crash的数字表格 / JZPTAB (莫比乌斯反演)

    题面 传送门:洛咕 Solution 调到自闭,我好菜啊 为了方便讨论,以下式子\(m>=n\) 为了方便书写,以下式子中的除号均为向下取整 我们来颓柿子吧qwq 显然,题目让我们求: \(\l ...

  3. 题解-[国家集训队]Crash的数字表格 / JZPTAB

    题解-[国家集训队]Crash的数字表格 / JZPTAB 前置知识: 莫比乌斯反演 </> [国家集训队]Crash的数字表格 / JZPTAB 单组测试数据,给定 \(n,m\) ,求 ...

  4. [luogu1829][bzoj2154][国家集训队]Crash的数字表格 / JZPTAB【莫比乌斯反演】

    传送门:洛谷,bzoj 题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时整除a和b的最小正整 ...

  5. 洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)

    题目背景 提示:原 P1829 半数集问题 已经迁移至 P1028 数的计算 题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a ...

  6. 【题解】[国家集训队]Crash的数字表格 / JZPTAB

    求解\(\sum_{i = 1}^{n}\sum_{j = 1}^{m}lcm\left ( i,j \right )\). 有\(lcm\left ( i,j \right )=\frac{ij}{ ...

  7. P1829 [国家集训队]Crash的数字表格 / JZPTAB

    推式子太快乐啦!虽然我好蠢而且dummy和maomao好巨(划掉) 思路 莫比乌斯反演的题目 首先这题有\(O(\sqrt n)\)的做法但是我没写咕咕咕 然后就是爆推一波式子 \[ \sum_{i= ...

  8. [国家集训队]Crash的数字表格 / JZPTAB 莫比乌斯反演

    ---题面--- 题解: $$ans = \sum_{i = 1}^{n}\sum_{j = 1}^{m}{\frac{ij}{gcd(i, j)}}$$ 改成枚举d(设n < m) $$ans ...

  9. 洛谷P1829 [国家集训队]Crash的数字表格 / JZPTAB(莫比乌斯反演)

    传送门 式子好麻烦orz……大佬好腻害orz->这里 //minamoto #include<iostream> #include<cstdio> #define ll ...

随机推荐

  1. Linux NTP时间服务器

    NTP 时间服务器 ntp也是一种协议 ntp软件(支持ntp协议)  CentOS6自带 CentOS7需要安装 chrony软件(支持ntp协议)   CentOS7自带 安装ntp CentOS ...

  2. RabbitMQ---8、连接断开处理-断线重连

    本文转载于:https://www.itsvse.com/thread-4636-1-1.html: 参考文献:http://www.likecs.com/show-29874.html:https: ...

  3. 微信小程序(二)框架的基本组成

    安装好 微信web开发者工具后. 让我们来了解一下工具的框架,上图: 工具总共分为三个部分,左上角红框框: 模拟器:模拟手机小程序界面,模拟器左上角可以选择手机型号,右上角红框处,千万别选成Offic ...

  4. 字符串匹配问题(lfyzoj)

    问题描述 字符串中只含有括号 (),[],<>,{},判断输入的字符串中括号是否匹配.如果括号有互相包含的形式,从内到外必须是<>,(),[],{},例如.输入: [()] 输 ...

  5. java实现邮箱验证的功能

    在日常生活中,我们在一个网站中注册一个账户时,往往在提交个人信息后,网站还要我们通过手机或邮件来验证,邮件的话大概会是下面这个样子的: 用户通过点击链接从而完成注册,然后才能登录. 也许你会想,为什么 ...

  6. 撩课-Java每天5道面试题第10天

    撩课Java+系统架构 视频 点击开始学习 81.Servlet的会话机制? HTTP 是一种无状态协议, 这意味着每次客户端检索网页时, 都要单独打开一个服务器连接, 因此服务器不会记录下 先前客户 ...

  7. fzou 1759 Super A^B mod C

    Problem 1759 Super A^B mod CAccept: 456    Submit: 1488Time Limit: 1000 mSec    Memory Limit : 32768 ...

  8. Chromium base库分割字符串SplitString

    前一段时间在工作过程中遇到一个场景需要将http response中的request header中的cookie字段取出并进行解析,但是手头没有解析cookie的工具类,同时cookie的表现就是个 ...

  9. Line Numbers for RichText Control in C#

    from: http://www.codeproject.com/Articles/38858/Line-Numbers-for-RichText-Control-in-C using Microso ...

  10. BZOJ4671:异或图

    传送门 直接求连通的不好做,考虑容斥 设 \(g_i\) 表示至少有 \(i\) 个连通块的方案数,\(f_i\) 表示恰好有 \(i\) 个的 那么 \[g_x=\sum_{i=x}^{n}\beg ...