前置芝士

关于这个题,你必须知道一个这样奇奇怪怪的式子啊QAQ

\[d(i*j)= \sum_{x|i} \sum_{y|j}[gcd(x,y)=1]
\]

留坑,先感性理解:后面那个gcd是为了去重。

UPD:

正文

根据前一部分,我们所要推倒的式子就变成了

\[ans=\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{x|i}\sum_{y|j}\left [ gcd(x,y)=1 \right ]
\]

我们可以改变一下枚举顺序,原来是枚举原数,现在我们改为枚举约数,再利用数学性质将其倍数全部筛掉,式子即变成

\[ans=\sum_{i=1}^{n}\sum_{j=1}^{m}\left \lfloor \frac{n}{i} \right \rfloor\left \lfloor \frac{m}{j} \right \rfloor\left [ gcd(i,j)=1 \right ]
\]

于是,我们可以把里面的那个东西稍稍的替换一下

\[ans=\sum_{i=1}^{n}\sum_{j=1}^{m}\left \lfloor \frac{n}{i} \right \rfloor\left \lfloor \frac{m}{j} \right \rfloor\sum_{d|gcd(i,j)}\mu (d)
\]

根据莫比乌斯函数的性质,这两个东西显然是等价的。

然后我们可以在和式枚举时就将gcd消掉,同时将d调整到和式最外层

然后整个式子就变成

\[ans=\sum_{d=1}^{min(n,m)}\mu (d)\sum_{x=1}^{\left \lfloor \frac{n}{x} \right \rfloor}\left \lfloor \frac{n}{dx} \right \rfloor\sum_{y=1}^{\left \lfloor \frac{m}{y} \right \rfloor}\left \lfloor \frac{m}{dy} \right \rfloor
\]

唯一的难点是,$\sum_{x=1}^{\left \lfloor \frac{n}{x} \right \rfloor}\left \lfloor \frac{n}{dx} \right \rfloor $

将\(n/x\),换成一个变量,就会发现,这东西也是可以分块的!!!

然后就可以愉快的整除分块了

贴代码

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=5e4+10;
int miu[maxn],prime[maxn],t;
bool vis[maxn];
ll g[maxn];
void get_g()
{
for(int i=1;i<=maxn;++i)
{
int l,r;
for(l=1;l<=i;l=r+1)
{
r=i/(i/l);
g[i]+=(i/l)*(r-l+1);
}
}
}//同样分块处理
void mobius()
{
miu[1]=1;
for(int i=2;i<=maxn;i++)
{
if(vis[i]==0)
miu[i]=-1,++t,prime[t]=i;
for(int j=1;j<=t&&i*prime[j]<=maxn;++j)
{
vis[i*prime[j]]=1;
if(!(i%prime[j])) break;
else miu[i*prime[j]]-=miu[i];
}
}
for(int i=1;i<=maxn;++i)
miu[i]+=miu[i-1];
}
int main()
{
get_g();
mobius();
int t;
int n,m;
scanf("%d",&t);
for(int _=1;_<=t;++_)
{
ll ans=0;
scanf("%d%d",&n,&m);
int tmp=min(n,m);
long long l,r;
for(l=1;l<=tmp;l=r+1)
{
r=min(n/(n/l),m/(m/l));
ans+=(miu[r]-miu[l-1])*g[n/l]*g[m/l];
}
printf("%lld\n",ans);
}
}

洛谷 P3327 【[SDOI2015]约数个数和】的更多相关文章

  1. 洛谷P3327 - [SDOI2015]约数个数和

    Portal Description 共\(T(T\leq5\times10^4)\)组数据.给出\(n,m(n,m\leq5\times10^4)\),求\[\sum_{i=1}^n\sum_{j= ...

  2. 洛谷 P3327 [SDOI2015]约数个数和 || Number Challenge Codeforces - 235E

    https://www.luogu.org/problemnew/show/P3327 不会做. 去搜题解...为什么题解都用了一个奇怪的公式?太奇怪了啊... 公式是这样的: $d(xy)=\sum ...

  3. 洛谷P3327 [SDOI2015]约数个数和 【莫比乌斯反演】

    题目 设d(x)为x的约数个数,给定N.M,求\(\sum_{i = 1}^{N} \sum_{j = 1}^{M} d(ij)\) 输入格式 输入文件包含多组测试数据.第一行,一个整数T,表示测试数 ...

  4. 洛谷P3327 [SDOI2015]约数个数和(莫比乌斯反演)

    题目描述 设d(x)为x的约数个数,给定N.M,求 \sum^N_{i=1}\sum^M_{j=1}d(ij)∑i=1N​∑j=1M​d(ij) 输入输出格式 输入格式: 输入文件包含多组测试数据.第 ...

  5. 洛谷P3327 [SDOI2015]约数个数和(莫比乌斯反演)

    传送门 公式太长了……我就直接抄一下这位大佬好了……实在懒得打了 首先据说$d(ij)$有个性质$$d(ij)=\sum_{x|i}\sum_{y|j}[gcd(x,y)=1]$$ 我们所求的答案为$ ...

  6. LOJ #2185 / 洛谷 P3329 - [SDOI2015]约数个数和(莫比乌斯函数)

    LOJ 题面传送门 / 洛谷题面传送门 题意: 求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^md(ij)\),\(d(x)\) 为 \(x\) 的约数个数. \( ...

  7. P3327 [SDOI2015]约数个数和 莫比乌斯反演

    P3327 [SDOI2015]约数个数和 莫比乌斯反演 链接 luogu 思路 第一个式子我也不会,luogu有个证明,自己感悟吧. \[d(ij)=\sum\limits_{x|i}\sum\li ...

  8. Luogu P3327 [SDOI2015]约数个数和

    又是恶心的莫比乌斯反演,蒟蒻我又是一脸懵逼的被CXR dalao狂虐. 题目要求\(ans=\sum_{i=1}^n \sum_{j=1}^m d(ij)\),其中\(d(ij)\)表示数\(x\)的 ...

  9. 并不对劲的bzoj3994:loj2185:p3327[SDOI2015]约数个数和

    题目大意 设d(x)为x的约数个数,\(t\)组询问,给定\(n,m\)(\(t,m,n\leq5*10^4\)),求$ \sum^n_{i=1}\sum^m_{j=1}d(i*j)$ 题解 假设\( ...

  10. luogu P3327 [SDOI2015]约数个数和 莫比乌斯反演

    题面 我的做法基于以下两个公式: \[[n=1]=\sum_{d|n}\mu(d)\] \[\sigma_0(i*j)=\sum_{x|i}\sum_{y|j}[gcd(x,y)=1]\] 其中\(\ ...

随机推荐

  1. Android远程桌面助手扩展之微信跳一跳辅助

    微信跳一跳的外挂辅助已是五花八门,万能的TB上也有了各种明码标价的代练.微信小程序游戏的火爆甚至带火了手游外挂产业.另一方面,跳一跳游戏也在不断更新,防止使用外挂刷高分.Android远程桌面助手支持 ...

  2. Win10解除网速限制让网速飞起来

    Win10隐藏了20%的网速,下面叫你怎么释放它: 1.按Win+R调出运行,输入gpedit.msc点击确定; 2.点击windows设置,右击基于策略Qos,选择高级Qos设置: 3.勾选如图方框 ...

  3. 对于windows操作系统磁盘访问权限修改的手残教训

    最近公司新配置的win10电脑,由于测试关于windows系统上项目的安装程序时默认使用了c盘安装,发现安装后的项目不是崩溃就是运行没结果的,偶然间发现同一个安装程序在d盘或其他非系统盘安装则正常.很 ...

  4. Boosting Static Representation Robustness for Binary Clone Search against Code Obfuscation and Compiler Optimization

    用于理解恶意软件的内部工作原理,并发现系统中的漏洞,逆向工程是一种耗费人工的却很重要的技术.汇编克隆搜索引擎是通过识别那些重复的或者已知的部件来帮助逆向工程师的工作,要想设计健壮的克隆搜索引擎是一项挑 ...

  5. LeetCode算法题-Assign Cookies(Java实现)

    这是悦乐书的第234次更新,第247篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第101题(顺位题号是455).假设你是一个很棒的父母,并想给你的孩子一些饼干.但是,你 ...

  6. jest 自动化测试

    概述 jest 是 facebook 开源的,用来进行单元测试的框架,可以测试 javascipt 和 react. 单元测试各种好处已经被说烂了,这里就不多扯了.重点要说的是,使用 jest, 可以 ...

  7. linux ssh免密登陆远程服务器

    10.170.1.18服务器免密登录到10.170.1.16服务器 首先登入一台linux服务器(10.170.1.18),此台做为母机(即登入其他linux系统用这台做为入口):执行一行命令生成ke ...

  8. 【Python 10】汇率兑换3.0(while循环)

    1.案例描述 设计一个汇率换算程序,其功能是将美元换算成人民币,或者相反. 2.0增加功能:根据输入判断是人民币还是美元,进行相应的转换计算 3.0增加功能:程序可以一直运行,知道用户选择退出 2.案 ...

  9. 监控redis

    [4ajr@redis1 scripts]$ cat redismonitor.sh #!/bin/bash #想要什么监控项再添加 rediscli="/soft/redis/bin/re ...

  10. tomcat目录

    1.解决Nginx+Tomcat下客户端https请求跳转成http的问题 2.tomcat配置通过域名直接访问项目首页步骤 3.tomcat配置文件server.xml详解 4.nginx-t/co ...