BZOJ3994:[SDOI2015]约数个数和——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=3994
https://www.luogu.org/problemnew/show/P3327#sub
参考:https://blog.csdn.net/zmoiynlp/article/details/45176129
(他的公式好像最后一点有些问题)
请先锻炼好抗打击能力再做这道题,可以看我的模板:数论函数 & 莫比乌斯反演
我们有\(d(ij)=\sum_{k|i}\sum_{l|j}[gcd(k,l)==1]\)
(感性证明很简单,于是就不证了)
(这个是本题第一难的地方,信息数学竞赛)
\(\sum_{i=1}^n\sum_{j=1}^md(ij)\)
\(=\sum_{i=1}^n\sum_{j=1}^m\sum_{k|i}\sum_{l|j}[gcd(k,l)=1]\)
\(=\sum_{k=1}^n\sum_{l=1}^m\lfloor\frac{n}{k}\rfloor\lfloor\frac{m}{l}\rfloor[gcd(k,l)=1]\)(跳了步,希望大家看得懂)
\(=\)套路(实则是跳步)
\(=\sum_{d=1}^{min(n,m)}\mu(d)\sum_{k=1}^{n}\sum_{l=1}^{m}\lfloor\frac{n}{k}\rfloor\lfloor\frac{m}{l}\rfloor[k|d][l|d]\)
\(=\sum_{d=1}^{min(n,m)}\mu(d)\sum_{k=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{l=1}^{\lfloor\frac{m}{d}\rfloor}\lfloor\frac{n}
{kd}\rfloor\lfloor\frac{m}{ld}\rfloor\)
我们令\(g(n)=\sum_{i=1}^n\lfloor\frac{n}{i}\rfloor\)
我们的套路有\(\sum_{i=1}^n\sum_{j=1}^n[i|j]=g(n)\)
是的你没有看错这玩意就是约数函数的前缀和。
(如果你还没看出来的话,把两个sigma颠倒一下)
(这是本题第二难的地方,信息数学竞赛)
于是预处理约数函数的前缀和。
(用到了算数基本定理的推导和约数函数是积性函数的性质,可见https://blog.csdn.net/ControlBear/article/details/77527115
(emmm……就算你全推出来了,这个不会也白搭,信息数学竞赛)
(我为什么要去作死做信息数学竞赛题啊!)
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=5e4+5;
inline int read(){int x;scanf("%d",&x);return x;}
ll su[N],miu[N],d[N],c[N];
int he[N];
void init(int n){
int tot=0;
miu[1]=d[1]=c[1]=1;
for(int i=2;i<=n;i++){
if(!he[i]){
su[++tot]=i;
miu[i]=-1;
c[i]=1;d[i]=2;
}
for(int j=1;j<=tot;j++){
if(i*su[j]>n)break;
he[i*su[j]]=1;
if(i%su[j]==0){
miu[i*su[j]]=0;
d[i*su[j]]=d[i]/(c[i]+1)*(c[i]+2);
c[i*su[j]]=c[i]+1;
break;
}else{
miu[i*su[j]]=miu[i]*miu[su[j]];
d[i*su[j]]=d[i]*d[su[j]];
c[i*su[j]]=1;
}
}
}
for(int i=1;i<=n;i++){
miu[i]+=miu[i-1];
d[i]+=d[i-1];
}
}
int main(){
init(5e4);
int t=read();
while(t--){
ll n=read(),m=read();
ll ans=0;
for(ll i=1,j;i<=min(n,m);i=j+1){
j=min(n/(n/i),m/(m/i));
ans+=(miu[j]-miu[i-1])*d[n/i]*d[m/i];
}
printf("%lld\n",ans);
}
return 0;
}
+++++++++++++++++++++++++++++++++++++++++++
+本文作者:luyouqi233。 +
+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+
+++++++++++++++++++++++++++++++++++++++++++
BZOJ3994:[SDOI2015]约数个数和——题解的更多相关文章
- P3327/bzoj3994 [SDOI2015]约数个数和(莫比乌斯反演)
P3327 [SDOI2015]约数个数和 神犇题解(转) 无话可补 #include<iostream> #include<cstdio> #include<cstri ...
- BZOJ3994: [SDOI2015]约数个数和
Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. O ...
- bzoj千题计划203:bzoj3994: [SDOI2015]约数个数和
http://www.lydsy.com/JudgeOnline/problem.php?id=3994 设d(x)为x的约数个数,给定N.M,求 用到的一个结论: 证明: 枚举n的约数i,枚举m的约 ...
- BZOJ3994: [SDOI2015]约数个数和(莫比乌斯反演)
Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. Out ...
- bzoj3994: [SDOI2015]约数个数和(反演+结论?!)
这题做的历程堪称惊心动魄 刚刚学了莫比乌斯反演的我高高兴兴的和cbx一起反演式子 期间有突破,有停滞,有否定 然后苟蒻的我背着cbx偷偷打开了题解 看到了 我...... 去你的有个性质啊(当然还是自 ...
- [bzoj3994][SDOI2015]约数个数和-数论
Brief Description 计算\(\sum_{i\leqslant n}\sum_{j\leqslant m}\sigma_0(ij)\). Algorithm Design 首先证明一个结 ...
- 【BZOJ3994】[SDOI2015]约数个数和 莫比乌斯反演
[BZOJ3994][SDOI2015]约数个数和 Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组 ...
- 【BZOJ3994】约数个数和(莫比乌斯反演)
[BZOJ3994]约数个数和(莫比乌斯反演) 题面 求\[\sum_{i=1}^n\sum_{j=1}^md(ij)\] 多组数据\((<=50000组)\) \(n,m<=50000\ ...
- 【BZOJ 3994】3994: [SDOI2015]约数个数和(莫比乌斯反演)
3994: [SDOI2015]约数个数和 Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接 ...
随机推荐
- Nginx+Tomcat多站点访问默认主页问题-狒狒完美解决-Q9715234
<Engine name="Catalina" defaultHost="www.abc.com"> <Host name="www ...
- ORA-15032、ORA-15033—Linux环境
SQL> alter diskgroup DATA add failgroup DATA_0000 disk '/dev/raw/raw12'; alter diskgroup DATA add ...
- Linux系统中ElasticSearch搜索引擎安装配置Head插件
近几篇ElasticSearch系列: 1.阿里云服务器Linux系统安装配置ElasticSearch搜索引擎 2.Linux系统中ElasticSearch搜索引擎安装配置Head插件 3.Ela ...
- Java开发工程师(Web方向) - 03.数据库开发 - 第5章.MyBatis
第5章--MyBatis MyBatis入门 Abstract: 数据库框架的工作原理和使用方法(以MyBatis为例) 面向对象的世界与关系型数据库的鸿沟: 面向对象世界中的数据是对象: 关系型数据 ...
- 【button】 按钮组件说明
原型: <button size="[default | mini]" type="[primary | default | warn]" plain=& ...
- IntelliJ IDEA for MAC 注释模板、快捷键生成注释
增加注释 在IntelliJ IDEA中为JAVA代码增加注释,首先需要配置注释模板,而后使用模板快捷键生成注释, 下面按照[配置模板].[模板使用]两部分进行介绍 ----------------- ...
- POJ 3487 The Stable Marriage Problem(稳定婚姻问题 模版题)
Description The stable marriage problem consists of matching members of two different sets according ...
- nodejs笔记--与Redis的交互篇(六)
原文地址:http://www.cnblogs.com/zhongweiv/p/node_redis.html 安装前准备 win64: Install python: http://www.pyth ...
- c语言乐曲演奏——《千本樱》
这个程序着实花费了我好长的时间,我本身对音乐一窍不通,先是跟着girl friend学习了简谱,根据c调44拍的<千本樱>写下了下面的程序. #include<stdio.h> ...
- 算法与数据结构5.2 Bubble Sort
★实验任务 给定一个 1~N 的排列 P,即 1 到 N 中的每个数在 P 都只出现一次. 现在要 对排列 P 进行冒泡排序,代码如下: for (int i = 1; i <= N; ++i) ...