题链:

http://www.lydsy.com/JudgeOnline/problem.php?id=3994

题解:

莫比乌斯反演

(先定义这样一个符号[x],如果x为true,则[x]=1,否则[x]=0)

首先有这么一个结论:

令d(x)表示x的约数的个数,那么

$d(nm)=\sum_{i|n}\sum_{j|m}[gcd(i,j)==1]$

证明:

设$n=p1^{x1}p2^{x2}p3^{x3}\cdots pk^{xk},m=p1^{y1}p2^{y2}p3^{y3}\cdots pk^{yk}$

则$nm=p1^{x1+y1}p2^{x2+y2}p3^{x3+y3}\cdots pk^{xk+yk}$

由约数定理,$d(nm)=(x1+y1+1)(x2+y2+1)(x3+y3+1)\cdots(xk+yk+1)$

再设$i=p1^{a1}p2^{a2}p3^{a3}\cdots pk^{ak},j=p1^{b1}p2^{b2}p3^{b3}\cdots pk^{bk}$

如果gcd(i,j)=1,那么必须满足a1==0或者b1==0,

如果a1==0,则b1有y1种取值,如果b1==0,则a1有x1种取值,同时a1和b1还可以同时为0

那么就有(x1+y1+1)种情况,

即只考虑p1的指数,就有(x1+y1+1)种情况,同时枚举的i,j如果互质的话,后面的a2,b2,a3,b3...也满足这个条件,

所以满足条件的i,j的对数为$\prod (x_i+y_i+1)$ 和约数定理的形式相同。


有了这个结论,我们来化一化求ANS的式子

$ANS=\sum_{n=1}^{N}\sum_{m=1}^{M}d(nm)$

$\quad\quad=\sum_{n=1}^{N}\sum_{m=1}^{M}\sum_{i|n}\sum_{j|m}[gcd(i,j)==1]$

$\quad\quad=\sum_{i=1}^{N}\sum_{j=1}^{M}[gcd(i,j)==1]\lfloor \frac{N}{i} \rfloor \lfloor \frac{M}{j} \rfloor$

同时由于刚刚入门mobius时,有这么一个式子:

$w(x)=\sum_{d|x}\mu(d)$ 若x==1则w(x)=1,否则w(x)=0

所以:$[gcd(i,j)==1]=\sum_{d|gcd(i,j)}\mu(d)$

那么继续:

$ANS=\sum_{i=1}^{N}\sum_{j=1}^{M}\lfloor \frac{N}{i} \rfloor \lfloor \frac{M}{j} \rfloor\sum_{d|gcd(i,j)}\mu(d)$

$\quad\quad=\sum_{d=1}^{min(n,m)}\mu(d)\sum_{i=1}^{N/d}\lfloor \frac{N}{id}\rfloor\sum_{j=1}^{M/d}\lfloor \frac{M}{jd}\rfloor$

令$f(x)=\sum_{i=1}^{x}\lfloor \frac{x}{i}\rfloor$

则$ANS=\sum_{d=1}^{min(n,m)}\mu(d)f(\lfloor \frac{N}{d} \rfloor)f(\lfloor \frac{M}{d} \rfloor)$

而f(x)就是最开始的d(x)的前缀和。。。但是需要预处理的x的范围小了很多,可以用线筛完成。

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#define ll long long
#define MAXN 50050
using namespace std;
ll f[MAXN];
int mu[MAXN];
void Sieve(){
static bool np[MAXN];
static int prime[MAXN],pnt;
f[1]=mu[1]=1;
for(int i=2,tmp,d;i<=50000;i++){
if(!np[i]) prime[++pnt]=i,mu[i]=-1,f[i]=2;
for(int j=1;j<=pnt&&i<=50000/prime[j];j++){
np[i*prime[j]]=1; tmp=i; d=1;
while(tmp%prime[j]==0) tmp/=prime[j],d++;
f[i*prime[j]]=f[tmp]*(d+1);
if(i%prime[j]) mu[i*prime[j]]=-mu[i];
else break;
}
}
for(int i=2;i<=50000;i++)
f[i]+=f[i-1],mu[i]+=mu[i-1];
}
int main(){
Sieve(); ll ans;
int Case,n,m,mini;
scanf("%d",&Case);
while(Case--){
scanf("%d%d",&n,&m);
mini=min(n,m); ans=0;
for(int d=1,last;d<=mini;d=last+1){
last=min(n/(n/d),m/(m/d));
ans+=(mu[last]-mu[d-1])*f[n/d]*f[m/d];
}
printf("%lld\n",ans);
}
return 0;
}

  

●BZOJ 3994 [SDOI2015]约数个数和的更多相关文章

  1. BZOJ 3994: [SDOI2015]约数个数和

    3994: [SDOI2015]约数个数和 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 898  Solved: 619[Submit][Statu ...

  2. BZOJ 3994: [SDOI2015]约数个数和 [莫比乌斯反演 转化]

    2015 题意:\(d(i)\)为i的约数个数,求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m d(ij)\) \(ij\)都爆int了.... 一开始想容斥一下 ...

  3. 【刷题】BZOJ 3994 [SDOI2015]约数个数和

    Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. Output T ...

  4. bzoj 3994 [SDOI2015]约数个数和——反演

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3994 \( d(i*j)=\sum\limits_{x|i}\sum\limits_{y|j ...

  5. BZOJ 3994: [SDOI2015]约数个数和3994: [SDOI2015]约数个数和 莫比乌斯反演

    https://www.lydsy.com/JudgeOnline/problem.php?id=3994 https://blog.csdn.net/qq_36808030/article/deta ...

  6. BZOJ.3994.[SDOI2015]约数个数和(莫比乌斯反演)

    题目链接 \(Description\) 求\[\sum_{i=1}^n\sum_{j=1}^md(ij)\] \(Solution\) 有结论:\[d(nm)=\sum_{i|d}\sum_{j|d ...

  7. 【BZOJ 3994】3994: [SDOI2015]约数个数和(莫比乌斯反演)

    3994: [SDOI2015]约数个数和 Description  设d(x)为x的约数个数,给定N.M,求   Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接 ...

  8. [BZOI 3994] [SDOI2015]约数个数和(莫比乌斯反演+数论分块)

    [BZOI 3994] [SDOI2015]约数个数和 题面 设d(x)为x的约数个数,给定N.M,求\(\sum _{i=1}^n \sum_{i=1}^m d(i \times j)\) T组询问 ...

  9. 【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} ...

随机推荐

  1. 201621123040《Java程序设计》第八周学习总结

    1.本周学习总结 2.书面作业 2.1ArrayList代码分析 2.1.1解释ArrayList的contains源代码 ArrayList.contain()方法通过调用indexOf()来判断元 ...

  2. Alpha冲刺置顶随笔

    项目名称:城市安全风险管控系统 小组成员: 张梨贤.林静.周静平.黄腾飞 Alpha冲刺随笔 Alpha冲刺Day1:http://www.cnblogs.com/linlkg/p/7896980.h ...

  3. 1013团队Beta冲刺日志集合帖

    Beta预备 Beta冲刺day1 Beta冲刺day2 Beta冲刺day3 Beta冲刺day4 Beta冲刺day5 Beta冲刺day6 Beta冲刺day7 用户使用调查报告 Beta冲刺总 ...

  4. iOS开发点滴-添加阴影效果

    UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:_backView.bounds]; _backView.layer.masks ...

  5. zookeeper安装及环境变量设置

    下载 首先去官网下载(自行选择版本):http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.11/然后执行tar -zxvf解压 对于后台安装 ...

  6. vue初尝试--组件

    github代码同步网址 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添 ...

  7. Centos7.x:开机启动服务的配置和管理

    一.开机启动服务的配置 1.创建服务配置(权限754) vim /usr/lib/systemd/system/nginx.service 文件内容解释 [Unit]:服务的说明Description ...

  8. SpringCloud的服务消费者 (一):(rest+ribbon)访问注册的微服务

    采用Ribbon或Feign方式访问注册到EurekaServer中的微服务.1.Ribbon实现了客户端负载均衡,Feign底层调用Ribbon2.注册在EurekaServer中的微服务api,不 ...

  9. spring9——AOP之AspectJ对AOP的实现

    从上述的实验中可以看出BeanNameAutoProxyCreator对于AOP的实现已经和完美了,但是还有两点不足之处: 1,对于切面的实现比较麻烦,既不同类型的通知切面要实现不同的接口,而且一个切 ...

  10. java将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    首先我们的算法是:例如 输入的是 90 1.找到90的最小公约数(1除外)是 2 2.然后把公约数 2 输出 3.接着用 90 / 2 = 45 (如果这里是素数,就结束,否则继续找最小公约数) 4. ...