Description

 设d(x)为x的约数个数,给定N、M,求 $\sum^N_{i=1}\sum^M_{j=1}d(ij)$

Input

输入文件包含多组测试数据。

第一行,一个整数T,表示测试数据的组数。
接下来的T行,每行两个整数N、M。

Output

T行,每行一个整数,表示你所求的答案。

Sample Input

2
7 4
5 6

Sample Output

110
121

HINT

1<=N, M<=50000

1<=T<=50000

题解

先给出一个结论: $$ \sigma_0(ij) = \sum_{a | i} \sum_{b | j} [gcd(a, b) = 1]$$

证明(摘自Ken_He):

我们令 $i = p_1^{a_1} p_2^{a_2} \cdots$ , $j = p_1^{b_1} p_2^{b_2} \cdots$ , $d | ij$ 且 $d = p_1^{c_1} p_2^{c_2} \cdots$ , 则 $c_n \le a_n + b_n$ 。

考虑如何不重复地统计每一个 $d$ : 令 $c_n = A_n + B_n$ , 其中 $A_n$ 和 $B_n$ 分别为 $i$ 和 $j$ 对 $c_n$ 的贡献, 则我们要求 \begin{cases}B_n = 0 & A_n < a_n \\B_n \ge 0 & A_n = a_n\end{cases}

这样一来, $c_n$ 的表示形式就变成唯一的了,因而不会被重复统计。我们再考虑如何统计这样的 $A_n$ 和 $B_n$ :我们令 $A_n' = a_n - A_n$ ,则约束条件变为\begin{cases}B_n = 0 & A_n' \ne 0 \\B_n \ge 0 & A_n' = 0\end{cases}

等价于 $gcd(a, b) = 1$ 。

因此得证。

\begin{aligned}ans&=\sum_{i=1}^N\sum_{j=1}^M\sum_{a\mid i}\sum_{b\mid j}[gcd(a,b)=1]\\&=\sum_{i=1}^N\sum_{j=1}^M\sum_{a\mid i}\sum_{b\mid j}\sum_{d\mid gcd(a,b)}\mu(d)\\&=\sum_{a=1}^N\sum_{b=1}^M\sum_{i=1}^{\left\lfloor\frac{N}{a}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{M}{b}\right\rfloor}\sum_{d\mid gcd(a,b)}\mu(d)\\&=\sum_{d=1}^{min\{N,M\}}\mu(d)\sum_{a=1}^{\left\lfloor\frac{N}{d}\right\rfloor}\sum_{b=1}^{\left\lfloor\frac{M}{d}\right\rfloor}\left\lfloor\frac{N}{ad}\right\rfloor\left\lfloor\frac{M}{bd}\right\rfloor\\&=\sum_{d=1}^{min\{N,M\}}\mu(d)\left(\sum_{a=1}^{\left\lfloor\frac{N}{d}\right\rfloor}\left\lfloor\frac{N}{ad}\right\rfloor\right)\left(\sum_{b=1}^{\left\lfloor\frac{M}{d}\right\rfloor}\left\lfloor\frac{M}{bd}\right\rfloor\right)\end{aligned}

设 $t(x)=\sum_{i=1}^x \left\lfloor\frac{x}{i}\right\rfloor$ ,

显然 $$\Rightarrow ans=\sum_{d=1}^{min\{N,M\}}\mu(d)\cdot t\left(\left\lfloor\frac{N}{d}\right\rfloor\right)\cdot t\left(\left\lfloor\frac{M}{d}\right\rfloor\right)$$

显然我们用 $O(n\sqrt n)$ 预处理出函数 $t$ ,再用 $O(T\sqrt n)$ 回答询问即可。

 //It is made by Awson on 2018.1.22
#include <set>
#include <map>
#include <cmath>
#include <ctime>
#include <queue>
#include <stack>
#include <cstdio>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define Abs(a) ((a) < 0 ? (-(a)) : (a))
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Min(a, b) ((a) < (b) ? (a) : (b))
#define Swap(a, b) ((a) ^= (b), (b) ^= (a), (a) ^= (b))
#define writeln(x) (write(x), putchar('\n'))
#define lowbit(x) ((x)&(-(x)))
using namespace std;
const int N = ;
void read(int &x) {
char ch; bool flag = ;
for (ch = getchar(); !isdigit(ch) && ((flag |= (ch == '-')) || ); ch = getchar());
for (x = ; isdigit(ch); x = (x<<)+(x<<)+ch-, ch = getchar());
x *= -*flag;
}
void write(LL x) {
if (x > ) write(x/);
putchar(x%+);
} int mu[N+], t[N+], n, m; void get_mu() {
int prime[N+], isprime[N+], tot = ;
memset(isprime, , sizeof(isprime)); isprime[] = , mu[] = ;
for (int i = ; i <= N; i++) {
if (isprime[i]) prime[++tot] = i, mu[i] = -;
for (int j = ; j <= tot && i*prime[j] <= N; j++) {
isprime[i*prime[j]] = ;
if (i%prime[j]) mu[i*prime[j]] = -mu[i];
else {mu[i*prime[j]] = ; break; }
}
mu[i] += mu[i-];
}
}
int get_t(int x) {
int ans = ;
for (int i = , last; i <= x; i = last+) {
last = x/(x/i); ans += (last-i+)*(x/i);
}
return ans;
} LL cal(int n, int m) {
if (n > m) Swap(n, m); LL ans = ;
for (int i = , last; i <= n; i = last+) {
last = Min(n/(n/i), m/(m/i));
ans += (LL)(mu[last]-mu[i-])*t[n/i]*t[m/i];
}
return ans;
}
void work() {
read(n), read(m); writeln(cal(n,m));
}
int main() {
int T; read(T); get_mu();
for (int i = ; i <= N; i++) t[i] = get_t(i);
while (T--) work();
return ;
}

[SDOI 2015]约数个数和的更多相关文章

  1. Mobius反演与积性函数前缀和演学习笔记 BZOJ 4176 Lucas的数论 SDOI 2015 约数个数和

    下文中所有讨论都在数论函数范围内开展. 数论函数指的是定义域为正整数域, 且值域为复数域的函数. 数论意义下的和式处理技巧 因子 \[ \sum_{d | n} a_d = \sum_{d | n} ...

  2. SDOI 2015 约束个数和

    Description: 共\(T \le 5 \times 10^4\)组询问, 每组询问给定\(n\)和\(m\), 请你求出 \[ \sum_{i = 1}^n \sum_{j = 1}^m \ ...

  3. 「BZOJ 3994」「SDOI 2015」约数个数和「莫比乌斯反演」

    题意 设\(d(x)\)为\(x\)的约数个数,求\(\sum_{i=1}^{n}\sum_{j=1}^{m}d(ij)\). 题解 首先证个公式: \[d(ij) = \sum_{x|i}\sum_ ...

  4. 【SDOI 2015】约数个数和

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

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

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

  6. [BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT)

    [BZOJ 3992] [SDOI 2015] 序列统计(DP+原根+NTT) 题面 小C有一个集合S,里面的元素都是小于质数M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数 ...

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

  8. hdu1492(约数个数定理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1492 这里先讲一下约数个数定理: 对于正整数x,将其质因分解为 x = pow(p1, a) * po ...

  9. UVA294DIvisors(唯一分解定理+约数个数)

    题目链接 题意:输入两个整数L,U(L <= U <= 1000000000, u - l <= 10000),统计区间[L,U]的整数中哪一个的正约数最多,多个输出最小的那个 本来 ...

随机推荐

  1. DirectSound---捕获音频、Qml/C++ 集成交互

    DirectSound的音频捕获原理和播放原理差不多,内部在一个缓冲区上循环写入捕获到的数据,并且提供notify通知功能. 1. 音频捕获 因为捕获流程和播放流程类似,我们就不在这里赘述了,只给出简 ...

  2. CodeBlocks使用介绍

    CodeBlocks对单个文件没法调试,需要建工程后才能调试,所以使用CodeBlocks必须先建工程. 一.如何用CodeBlocks建工程文件. 选择File->New->Projec ...

  3. Beta版本敏捷冲刺每日报告——Day3

    1.情况简述 Beta阶段第三次Scrum Meeting 敏捷开发起止时间 2017.11.4 08:00 -- 2017.11.4 22:00 讨论时间地点 2017.11.4晚9:00,软工所实 ...

  4. 团队作业4——第一次项目冲刺(Alpha版本)2017.11.19

    第三次会议:2017-11-16 第二次会议讨论的还没有完全实现,于是在第三次会议上对此进行了一些对我们工作上的看法,得出结论:多花时间啊!!!! 又没照照片图: 会议主要内容: 1.登录注册完善 2 ...

  5. 在Apache中运行Python WSGI应用

    我们介绍如何使用Apache模块mod_wsgi来运行Python WSGI应用. 安装mod_wsgi 我们假设你已经有了Apache和Python环境,在Linux或者Mac上,那第一步自然是安装 ...

  6. Linux下Apache服务的查看和启动

      cd到/etc/rc.d/init.d/目录,并列出该目录下的所有文件,看看是否有httpd   使用httpd -v查看已经安装的httpd的版本   使用rpm -qa | grep http ...

  7. 安装Loadrunner 11.0时,弹出缺少2.8 sp1组件--解决方案(win7)

    这是因为注册表缺少FullInstallVer和Version,归根到底是madc安装的的问题 以下是解决方法: 1.运行regedit,打开注册表,进入HKEY_LOCAL_MACHINE\SOFT ...

  8. OAuth是什么?

    一.OAuth的概念 1.问题的提出 2.应用场景 3.规范演进 二.OAuth的运行原理 1.参与者 访问私有数据需要用户参与(客户.用户.服务提供者) 访问公共数据不需要用户参与(客户.服务提供者 ...

  9. Linux实战案例(3)创建和删除用户

    建用户: adduser phpq                            //新建phpq用户passwd phpq                            //给php ...

  10. 2018年html5入门到精通教程电子书百度云盘下载共22本

    名称 查看 <HTML5启动和运行>(HTML5.Up.and.Running)扫描版[PDF] 下载 <Pro HTML5 Performance>(Pro HTML5 Pe ...