BZOJ.3994.[SDOI2015]约数个数和(莫比乌斯反演)
\(Description\)
求$$\sum_{i=1}n\sum_{j=1}md(ij)$$
\(Solution\)
有结论:$$d(nm)=\sum_{i|d}\sum_{j|d}[\gcd(i,j)=1]$$
证明可以对质因子单独考虑吧,不想写了,背过就好了。见这:https://blog.csdn.net/PoPoQQQ/article/details/45078079。
\]
转为枚举\(a,b\),$$\sum_{i=1}n\sum_{j=1}md(ij)=\sum_{i=1}n\sum_{j=1}m\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{j}\rfloor[\gcd(i,j)=1]$$
然后反演,设$$F(d)=\sum_{i=1}n\sum_{j=1}m\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{j}\rfloor\left[d\mid(i,j)\right]=\sum_{i=1}^{\lfloor\frac nd\rfloor}\sum_{j=1}^{\lfloor\frac md\rfloor}\lfloor\frac{n}{id}\rfloor\lfloor\frac{m}{jd}\rfloor\f(n)=\sum_{i=1}n\sum_{j=1}m\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{j}\rfloor\left[(i,j)=n\right]$$
则$$\begin{aligned}f(1)&=\sum_{d=1}{\min(n,m)}\mu(d)F(d)\&=\sum_{d=1}{\min(n,m)}\mu(d)\sum_{i=1}^{\lfloor\frac nd\rfloor}\lfloor\frac{n}{id}\rfloor\sum_{j=1}^{\lfloor\frac md\rfloor}\lfloor\frac{m}{jd}\rfloor\end{aligned}$$
令\(g(n)=\sum_{i=1}\lfloor\frac ni\rfloor\),则\(g(n)\)可以同样用数论分块\(O(n\sqrt n)\)的时间预处理。(也可以线性筛出来,不过很麻烦。)
那么\(f(1)=\sum_{d=1}^{\min(n,m)}\mu(d)g(\lfloor\frac nd\rfloor)g(\lfloor\frac md\rfloor)\)可以\(O(\sqrt n)\)计算。
终于填了这个近半年前留下的坑了...
//1772kb 6448ms
#include <cstdio>
#include <cctype>
#include <algorithm>
//#define gc() getchar()
#define MAXIN 300000
#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
const int N=5e4;
int cnt,P[N>>3],mu[N+3];
long long g[N+3];
bool not_P[N+3];
char IN[MAXIN],*SS=IN,*TT=IN;
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
void Init()
{
mu[1]=1;
for(int i=2; i<=N; ++i)
{
if(!not_P[i]) P[++cnt]=i, mu[i]=-1;
for(int j=1,v; j<=cnt&&(v=i*P[j])<=N; ++j)
{
not_P[v]=1;
if(i%P[j]) mu[v]=-mu[i];
else break;//mu[v]=0;
}
}
for(int i=1; i<=N; ++i) mu[i]+=mu[i-1];
for(int i=1; i<=N; ++i)
{
long long ans=0;
for(int j=1,nxt; j<=i; j=nxt+1)
{
nxt=i/(i/j);
ans+=1ll*(nxt-j+1)*(i/j);
}
g[i]=ans;
}
}
int main()
{
Init();
for(int T=read(),n,m; T--; )
{
n=read(),m=read();
long long ans=0;
for(int i=1,nxt,lim=std::min(n,m); i<=lim; i=nxt+1)
{
nxt=std::min(n/(n/i),m/(m/i));
ans+=1ll*(mu[nxt]-mu[i-1])*g[n/i]*g[m/i];
}
printf("%lld\n",ans);
}
return 0;
}
BZOJ.3994.[SDOI2015]约数个数和(莫比乌斯反演)的更多相关文章
- BZOJ 3994: [SDOI2015]约数个数和 [莫比乌斯反演 转化]
2015 题意:\(d(i)\)为i的约数个数,求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m d(ij)\) \(ij\)都爆int了.... 一开始想容斥一下 ...
- [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]约数个数和3994: [SDOI2015]约数个数和 莫比乌斯反演
https://www.lydsy.com/JudgeOnline/problem.php?id=3994 https://blog.csdn.net/qq_36808030/article/deta ...
- P3327 [SDOI2015]约数个数和 莫比乌斯反演
P3327 [SDOI2015]约数个数和 莫比乌斯反演 链接 luogu 思路 第一个式子我也不会,luogu有个证明,自己感悟吧. \[d(ij)=\sum\limits_{x|i}\sum\li ...
- BZOJ 3994: [SDOI2015]约数个数和
3994: [SDOI2015]约数个数和 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 898 Solved: 619[Submit][Statu ...
- 【BZOJ3994】[SDOI2015]约数个数和 莫比乌斯反演
[BZOJ3994][SDOI2015]约数个数和 Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组 ...
- ●BZOJ 3994 [SDOI2015]约数个数和
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3994 题解: 莫比乌斯反演 (先定义这样一个符号[x],如果x为true,则[x]=1,否则 ...
- 【刷题】BZOJ 3994 [SDOI2015]约数个数和
Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. Output T ...
- [SDOI2015]约数个数和 莫比乌斯反演
---题面--- 题解: 为什么SDOI这么喜欢莫比乌斯反演,,, 首先有一个结论$$d(ij) = \sum_{x|i}\sum_{y|j}[gcd(x, y) == 1]$$为什么呢?首先,可以看 ...
随机推荐
- LRN
转自https://blog.csdn.net/u011204487/article/details/76026537 LRN全称为Local Response Normalization,即局部响应 ...
- AngularJS总结
因为最近想学习一下ionic框架,了解到ionic是基于AngularJS语法,并且通过SASS构建应用程序,之前自己一直用Vue框架,还有Less,刚刚好趁此机会,学习一下AngularJS与SAS ...
- Spark记录-Scala语句(运算符-if-for-while-try-模式匹配)
Scala条件运算符 Scala条件运算符在下表中列出. 运算符 操作 描述 && 与 运算符左侧和右侧的值为true.仅当左侧为真时,右侧才被计算. || 或 左侧或右侧的至少一个值 ...
- zsh与oh-my-zsh是什么
zsh是bash的增强版,其实zsh和bash是两个不同的概念.zsh更加强大. 通常zsh配置起来非常麻烦,且相当的复杂,所以oh-my-zsh是为了简化zsh的配置而开发的,因此oh-my-zsh ...
- win10内建子系统Linux
从cmd中下载linux和linux终端安装程序一样 最新要从商店购买(当然是免费) ubuntu openSUSE SUSE 3个 创建用户
- Docker 入门 第二部分: 容器
目录 Docker 入门 第二部分: 容器 先决条件 介绍 你的新开发环境 使用 Dockerfile 定义一个容器 Dockerfile 应用本身 requirements.txt app.py 构 ...
- dedecms织梦自增索引标签
在列表中我们经常会需要动态的索引值,那么就可以用到如下标签 [field:global.autoindex/] 默认是从1开始,如果我们想从0或者从其他数开始如下: [field:autoindex ...
- 移动端手势库hammerJS 2.0.4官方文档翻译(转)
hammerJS是一个优秀的.轻量级的触屏设备手势库,现在已经更新到2.04版本,跟1.0版本有点天壤地别了,毕竟改写了事件名并新增了许多方法,允许同时监听多个手势.自定义识别器,也可以识别滑动方向. ...
- Python super() 函数
super() 函数是用于调用父类(超类)的一个方法. super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果重定义某个方法,该方法会覆盖父类的同名方法,但有时 ...
- oracle开机自启,开机自动关闭防火墙,开机监听自启
1.修改oratab 2,修改rc.local 3.关闭防火墙,设置开机时清空所有规则 参考文章: 1.https://blog.csdn.net/weeknd/article/details/726 ...