题意

设\(d(x)\)为\(x\)的约数个数,求\(\sum_{i=1}^{n}\sum_{j=1}^{m}d(ij)\)。

题解

首先证个公式:

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

可以这么考虑:利用唯一分解定理把\(i,j\)分解,即:

$i=\prod_{k = 1}^{m} p_k{c_k},j=\prod_{k=1}m p_k^{d_k} $

那等式左边显然为\(\prod(c_k+d_k+1)\),

然后考虑等式右边在干什么事情:约数的最大公约数为\(1\)。

我们把\(x,y\)分解以后\(p_k\)的指数分别记为\(a_k,b_k\)

这就是说对于每个\(p_k\),\(a_k,b_k\)最多有一个大于\(0\)。

那每一位分成三种情况,\(a_k=b_k=0\);\(a_k\in[1,c_k]\)且\(b_k=0\);\(a_k=0\)且\(b_k\in[1,d_k]\)

然后根据乘法原理乘起来,得到的结果和左边一样,就证出来了

然后带进去化简式子:(假设\(n\leq m\))

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

\[=\sum_{x=1}^n \sum_{y=1}^m [gcd(x, y)=1]\lfloor \frac{n}{x}\rfloor\lfloor \frac{m}{y} \rfloor
\]

\[=\sum_{x=1}^n \sum_{y=1}^m (\sum_{d|x,d|y} \mu(d) )\lfloor \frac{n}{x}\rfloor\lfloor \frac{m}{y} \rfloor
\]

\[=\sum_{d=1}^n \mu(d) \sum_{x=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{y=1}^{\lfloor \frac{m}{d} \rfloor} \lfloor \frac{n}{xd} \rfloor \lfloor \frac{m}{xd} \rfloor
\]

这里利用整除的小性质:\(\lfloor\frac{\lfloor \frac{a}{b} \rfloor}{c} \rfloor=\lfloor\frac{\lfloor\frac{a}{c}\rfloor}{b}\rfloor\)

\[=\sum_{d=1}^n \mu(d) \sum_{x=1}^{\lfloor \frac{n}{d} \rfloor} \sum_{y=1}^{\lfloor \frac{m}{d} \rfloor} \lfloor \frac{\lfloor\frac{n}{d}\rfloor}{x} \rfloor \lfloor \frac{\lfloor\frac{m}{d}\rfloor}{y} \rfloor
\]

记\(f(n)=\sum_{i=1}^n\lfloor \frac{n}{i} \rfloor\),则答案为\(\sum_{d=1}^n \mu(d)f(\lfloor \frac{n}{d} \rfloor) f(\lfloor \frac{m}{d} \rfloor)\)

这里如果\(f\)通过数论分块预处理,虽然可以过但是显然不够优美,可以换个角度考虑

这个式子的意义是,对于每个\(i\)统计它\(\leq n\)的所以倍数。那么每个数会被统计\(d(i)\)次(\(d\)为约数个数),因此:

\(f(n)=\sum_{i=1}^n d(i)\)

就可以线性筛预处理\(d\)的前缀和,还要预处理\(\mu\)的前缀和,然后每次数论分块。

#include <algorithm>
#include <cstdio>
using namespace std; typedef long long ll; const int N = 5e4 + 10; ll sum[N], mu[N], d[N];
int p[N], tot, e[N];
bool tag[N]; void init(int n) {
mu[1] = d[1] = 1;
for(int i = 2; i <= n; i ++) {
if(!tag[i]) {
p[tot ++] = i; mu[i] = -1; d[i] = 2; e[i] = 1;
}
for(int j = 0; j < tot && i * p[j] <= n; j ++) {
tag[i * p[j]] = 1;
if(i % p[j] == 0) {
mu[i * p[j]] = 0;
e[i * p[j]] = e[i] + 1;
d[i * p[j]] = d[i] / (e[i] + 1) * (e[i] + 2);
break ;
}
mu[i * p[j]] = - mu[i];
e[i * p[j]] = 1;
d[i * p[j]] = d[i] * 2;
}
mu[i] += mu[i - 1];
d[i] += d[i - 1];
}
} ll calc(int n, int m) {
ll ans = 0;
for(int i = 1, j; i <= n; i = j + 1) {
j = min(n / (n / i), m / (m / i));
ans += (mu[j] - mu[i - 1]) * d[n / i] * d[m / i];
}
return ans;
} int main() {
init(50000);
int test; scanf("%d", &test);
for(int n, m; test --; ) {
scanf("%d%d", &n, &m);
if(n > m) swap(n, m);
printf("%lld\n", calc(n, m));
}
return 0;
}

「BZOJ 3994」「SDOI 2015」约数个数和「莫比乌斯反演」的更多相关文章

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

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

  2. 【SDOI 2015】约数个数和

    Problem Description 设 \(d(x)\) 为 \(x\) 的约数个数,给定 \(N\).\(M\),求 \[ \sum_{i=1}^N \sum_{j=1}^M d(ij) \] ...

  3. bzoj 2005 & 洛谷 P1447 [ Noi 2010 ] 能量采集 —— 容斥 / 莫比乌斯反演

    题目:bzoj 2005 https://www.lydsy.com/JudgeOnline/problem.php?id=2005   洛谷 P1447 https://www.luogu.org/ ...

  4. 「BZOJ 3529」「SDOI 2014」数表「莫比乌斯反演」

    题意 有一张 \(n\times m\) 的数表,其第\(i\)行第\(j\)列的数值为能同时整除\(i\)和\(j\)的所有自然数之和. \(T\)组数据,询问对于给定的 \(n,m,a\) , 计 ...

  5. ☆ [POI2007] ZAP-Queries 「莫比乌斯反演」

    题目类型:莫比乌斯反演 传送门:>Here< 题意:求有多少对正整数对\((a,b)\),满足\(0<a<A\),\(0<b<B\),\(gcd(a,b)=d\) ...

  6. 「CF235E」Number Challenge「莫比乌斯反演」

    一个结论:(从二维扩展来的,三维也是对的,证明可以考虑质因数分解) \[ d(ijk)=\sum_{i'|i}\sum_{j'|j}\sum_{k'|k}[\gcd(i',j')=1][\gcd(i' ...

  7. 【BZOJ 3993】【SDOI 2015】星际战争

    http://www.lydsy.com/JudgeOnline/problem.php?id=3993 调了好长时间啊 这道题设时间为time,那么对于m个武器从S向这m个点连容量为time*Bi的 ...

  8. BZOJ 4089:[Sdoi2015]graft(SDOI 2015 Round 2 Day 2)

    别人家的神选系列,我只会做这道题QAQ 题目描述: 给定一颗树,加上k条边,将n个点染色,相邻两点不同,记颜色为i的又ti个,求$$\frac{\sum_{i=1}^{n} \frac{ti}{i}} ...

  9. 【BZOJ 3993】【SDOI 2015】序列统计

    http://www.lydsy.com/JudgeOnline/problem.php?id=3992 这道题好难啊. 第一眼谁都能看出来是个dp,设\(f(i,j)\)表示转移到第i位时前i位的乘 ...

随机推荐

  1. 在Mac系统下如何恢复SourceTree全局忽略的文件

    在家目录“~”下编辑 “.gitignore_global ” 文件即可:vim  .gitignore_global

  2. Sql server big data如何批量update数据

    原因: 要一次性update 2千万条数据,虽然update sql很简单,但是由于一次性修改太多的数据,造成数据库log满了,就会报error: [ErrorCode: 9002, SQL Stat ...

  3. 机器学习:集成学习(Bagging、Pasting)

    一.集成学习算法的问题 可参考:模型集成(Enxemble) 博主:独孤呆博 思路:集成多个算法,让不同的算法对同一组数据进行分析,得到结果,最终投票决定各个算法公认的最好的结果: 弊端:虽然有很多机 ...

  4. java代码异常处理篇-----循环

    总结:注意一个方法:nextLine();它表示:执行当前行,返回跳过的输入信息. package com.da; import java.util.InputMismatchException; i ...

  5. spring中JavaConfig相关的注解

    在spring3.0中增加配置spring beans的新方式JavaConfig,可以替换spring的applicataion.xml配置.也即@Configuration对等<beans/ ...

  6. 远程摄像头软件mjpg-streamer使用指南

    转 自:http://bbs.hdchina.org/viewthread.php?tid=94749 mjpg-streamer 可以通过文件或者是HTTP方式访问linux UVC兼容摄像头.可以 ...

  7. Firefox切换页面默认显示语言

    重新安装了下Firefox,发现页面语言变为中文,而我的有些脚本是在英文界面录的,因此想把默认语言改为英文. 方法如下: 工具 - 选项 - 语言(选择...),将英文上移到顶部 在做上面的修改之前, ...

  8. C#引用类库时出现黄色三角加感叹号的处理

    C#引用类库时出现黄色三角加感叹号的处理方法 一个C#项目 在引用中有个引用项上有个黄色三角加感叹号 导致报错 类库的目标框架不一致,修改成一样就可以了. 选中类库右击属性:“目标框架”,修改成与引用 ...

  9. 嵌入式Linux启动优化手记2&nbsp;U…

    参考一下 原文地址:U-boot优化">嵌入式Linux启动优化手记2 U-boot优化作者:ZhaoJunling 既然不能使用新的U-boot,那就优化一点是一点,慢慢干吧. 1. ...

  10. css知多少(1)——我来问你来答(转)

    css知多少(1)——我来问你来答   1. 引言 各位前端或者伪前端(比如作者本人)的同志们,css对你们来说不是很陌生.比如我,在几年之前上大学的时候,给外面做网站就用css,而且必须用css.这 ...