bzoj 3994 [SDOI2015]约数个数和——反演
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3994
\( d(i*j)=\sum\limits_{x|i}\sum\limits_{y|j}e(gcd(\frac{i}{x},y)==1) \)
即把 i*j 的约数质因数分解后,把质因数尽量放在 x 那里,以防重复。
\( ans = \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\sum\limits_{x|i}\sum\limits_{y|j}e(gcd(\frac{i}{x},y)==1) \)
\( = \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\sum\limits_{x|i}\sum\limits_{y|j}\sum\limits_{d|x , d|y}\mu(d) \)
注意这里不要把 d 提前,要把 x , y 提前。
\( = \sum\limits_{x=1}^{n}\sum\limits_{y=1}^{m}\left\lfloor \frac{n}{x} \right\rfloor \left\lfloor \frac{m}{y} \right\rfloor \sum\limits_{d|x , d|y}\mu(d) \)
\( = \sum\limits_{d=1}^{n}\mu(d)\sum\limits_{i=1}^{\frac{n}{d}}\sum\limits_{j=1}^{\frac{m}{d}}\left\lfloor \frac{n}{i*d} \right\rfloor \left\lfloor \frac{m}{j*d} \right\rfloor \)
这时要发现右边的求和边界与值的一些共同点。
\( = \sum\limits_{d=1}^{n}\mu(d)\sum\limits_{i=1}^{\frac{n}{d}}\left\lfloor \frac{\left\lfloor\frac{n}{d}\right\rfloor}{i} \right\rfloor\sum\limits_{j=1}^{\frac{m}{d}} \left\lfloor \frac{\left\lfloor\frac{m}{d}\right\rfloor}{j} \right\rfloor \)
令 \( g(i) = \sum\limits_{j=1}^{i}\left\lfloor\frac{i}{j}\right\rfloor \) ,则 g 可以 \( n\sqrt{n} \) 预处理。剩下的就是数论分块了。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=5e4+;
int u[N],s[N],pri[N];bool vis[N];ll g[N];
void init()
{
int lm=5e4,cnt=;
for(int t=;t<=lm;t++)
for(int i=,j;i<=t;i=j+)
{
int d=t/i; j=t/d;
g[t]+=(ll)d*(j-i+);
}
u[]=s[]=;
for(int i=;i<=lm;i++)
{
if(!vis[i])pri[++cnt]=i,u[i]=-;
for(int j=;j<=cnt&&(ll)i*pri[j]<=lm;j++)
{
vis[i*pri[j]]=;
if(i%pri[j]==){u[i*pri[j]]=;break;}
u[i*pri[j]]=-u[i];
}
s[i]=s[i-]+u[i];
}
}
int main()
{
int T,n,m;scanf("%d",&T); init();
while(T--)
{
scanf("%d%d",&n,&m);if(n>m)swap(n,m);
ll ans=;
for(int i=,j;i<=n;i=j+)
{
int d0=n/i,d1=m/i; j=min(n/d0,m/d1);
ans+=(ll)(s[j]-s[i-])*g[d0]*g[d1];
}
printf("%lld\n",ans);
}
return ;
}
bzoj 3994 [SDOI2015]约数个数和——反演的更多相关文章
- BZOJ 3994: [SDOI2015]约数个数和
3994: [SDOI2015]约数个数和 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 898 Solved: 619[Submit][Statu ...
- BZOJ 3994: [SDOI2015]约数个数和 [莫比乌斯反演 转化]
2015 题意:\(d(i)\)为i的约数个数,求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m d(ij)\) \(ij\)都爆int了.... 一开始想容斥一下 ...
- 【刷题】BZOJ 3994 [SDOI2015]约数个数和
Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. Output T ...
- BZOJ 3994: [SDOI2015]约数个数和3994: [SDOI2015]约数个数和 莫比乌斯反演
https://www.lydsy.com/JudgeOnline/problem.php?id=3994 https://blog.csdn.net/qq_36808030/article/deta ...
- BZOJ.3994.[SDOI2015]约数个数和(莫比乌斯反演)
题目链接 \(Description\) 求\[\sum_{i=1}^n\sum_{j=1}^md(ij)\] \(Solution\) 有结论:\[d(nm)=\sum_{i|d}\sum_{j|d ...
- ●BZOJ 3994 [SDOI2015]约数个数和
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3994 题解: 莫比乌斯反演 (先定义这样一个符号[x],如果x为true,则[x]=1,否则 ...
- 【BZOJ 3994】3994: [SDOI2015]约数个数和(莫比乌斯反演)
3994: [SDOI2015]约数个数和 Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接 ...
- [BZOI 3994] [SDOI2015]约数个数和(莫比乌斯反演+数论分块)
[BZOI 3994] [SDOI2015]约数个数和 题面 设d(x)为x的约数个数,给定N.M,求\(\sum _{i=1}^n \sum_{i=1}^m d(i \times j)\) T组询问 ...
- 【BZOJ】3994: [SDOI2015]约数个数和
题意: \(T(1 \le T \le 50000)\)次询问,每次给出\(n, m(1 \le n, m \le 50000)\),求\(\sum_{i=1}^{n} \sum_{j=1}^{m} ...
随机推荐
- http协议code码
301 永久重定向 类似手机呼叫转移 302 临时重定向 类似手机呼叫转移 403 forbidden ngnix怎么解决? 含义:表示你在请求一个资源文件,但是nginx不允许你查看. 原因1:访问 ...
- su | sudo su | sudo -i
su <user> <user> <user> 需要输入user的密码,该命令改变user id,执行过后,以<user>中定义的用户运行shell,就 ...
- linux---进程,(rpm,yum)软件包
3) 为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区,大小为5G fdisk -l fdisk /dev/sdb p 查看 n 新建 p 主分区 ...
- iptables详解(11):iptables之网络防火墙
我们一起来回顾一下之前的知识,在第一篇介绍iptables的文章中,我们就描述过防火墙的概念,我们说过,防火墙从逻辑上讲,可以分为主机防火墙与网络防火墙. 主机防火墙:针对于单个主机进行防护. 网络防 ...
- [JS]JavaScript判断操作系统版本
function detectOS() { var sUserAgent = navigator.userAgent; var isWin = (navigator.platform == " ...
- Oracle 常用系统包
一.DBMS_OUTPUT(用于输入和输出信息) 二.DBMS_JOB(用于安排和管理作业队列) 三.dbms_pipe(类似UNIX系统的管道) 四.dbms_alert(用于生成并传递数据库预警信 ...
- UML_04_时序图
一.前言 时序图建模工具,推荐一个工具 https://www.zenuml.com/ 时序图是一种强调消息时序的交互图,他由对象(Object).消息(Message).生命线(Lifeline) ...
- JSP和JS的区别
从本科毕业设计开始就一直困扰我,jsp和js这两者的区别,一直处于迷糊状态,也没有搞清楚.今天就简单的介绍下两者的区别. 1.JSP全称是java server page JS全称是javaSc ...
- echarts-detail--柱状图
一:柱形图 1.Echarts-柱状图柱图宽度设置-----只需要设置series中的坐标系属性barWidth就可以 /** * 堆积柱状图 * @param xaxisdata x轴:标签(数组) ...
- CUDA Samples: Streams' usage
以下CUDA sample是分别用C++和CUDA实现的流的使用code,并对其中使用到的CUDA函数进行了解说,code参考了<GPU高性能编程CUDA实战>一书的第十章,各个文件内容如 ...