题意:

\(T(1 \le T \le 50000)\)次询问,每次给出\(n, m(1 \le n, m \le 50000)\),求\(\sum_{i=1}^{n} \sum_{j=1}^{m} d(ij)\),其中\(d(n)\)表示\(n\)的约数个数

分析

有个结论:

$$\sum_{x_1}^{y_1} \sum_{x_2}^{y_2} \cdots \sum_{x_k}^{y_k} d(x_1 x_2 \cdots x_k) = \sum_{x_1}^{y_1} \sum_{x_2}^{y_2} \cdots \sum_{x_k}^{y_k} \prod_{i=1}^{k} \left \lfloor \frac{y_i}{x_i} \right \rfloor \prod_{i

(证明是二大重数学归纳,数学恐惧症的快快离开。

首先对于\(k=1\),我们可以通过算贡献证明。现在我们对\(k>1\)进行归纳:

我们需要证明:$$d_1(y_1, y_2, \cdots, y_k) = \sum_{x_1}^{y_1} \sum_{x_2}^{y_2} \cdots \sum_{x_k}^{y_k} d(x_1 x_2 \cdots x_k) = f_1 (y_1, y_2, \cdots, y_k) = \sum_{x_1}^{y_1} \sum_{x_2}^{y_2} \cdots \sum_{x_k}^{y_k} \prod_{i=1}^{k} \left \lfloor \frac{y_i}{x_i} \right \rfloor \prod_{i < j} [(x_i, x_j)=1]$$

我们通过\(y_1\)来归纳:

首先\(y_1=1\)时,发现就是\(k-1\)维的证明,根据归纳条件,成立。

然后对于\(y_1 > 1\),我们设$$d_2(y_1, y_2, \cdots, y_k) = d_1(y_1, y_2, \cdots, y_k) - d_1(y_1-1, y_2, \cdots, y_k)$$ $$f_2(y_1, y_2, \cdots, y_k) = f_1(y_1, y_2, \cdots, y_k) - f_1(y_1-1, y_2, \cdots, y_k)$$然后用\(y_2\)归纳\(d_2 = f_2\)。一直这样做下去,直到需要归纳\(d_{k+1} = f_{k+1}\):

就是需要证明这个结论:

\[d_{k+1}(y_1, y_2, \cdots, y_k) = d(y_1 y_2 \cdots y_k) = f_{k+1}(y_1, y_2, \cdots, y_k) = \sum_{x_1|y_1} \sum_{x_2|y_2} \cdots \sum_{x_k|y_k} \prod_{i < j} [(x_i, x_j)=1]
\]

这个结论通过讨论质因子的贡献就能证明出。

题解

于是剩下的不多说,分块大法。

$$
\begin{align}
ans
& =
\sum_{i=1}^{n}
\sum_{j=1}^{m} d(ij)
\\

& =

\sum_{i=1}^{n}

\sum_{j=1}^{m} \left \lfloor \frac{n}{i} \right \rfloor \left \lfloor \frac{m}{j} \right \rfloor [(i, j)=1]

\

& =

\sum_{d=1}^{n} \mu(d)

\sum_{i=1}^{ \left \lfloor \frac{n}{d} \right \rfloor }

\sum_{j=1}^{ \left \lfloor \frac{m}{d} \right \rfloor } \left \lfloor \frac{n}{id} \right \rfloor \left \lfloor \frac{m}{jd} \right \rfloor

\

& =

\sum_{d=1}^{n} \mu(d)

\sum_{i=1}^{ \left \lfloor \frac{n}{d} \right \rfloor } \left \lfloor \frac{ \left \lfloor \frac{n}{d} \right \rfloor }{i} \right \rfloor

\sum_{j=1}^{ \left \lfloor \frac{m}{d} \right \rfloor } \left \lfloor \frac{ \left \lfloor \frac{m}{d} \right \rfloor }{j} \right \rfloor

\

\end{align}

\[</p>

我们用$O(n^{1.5})$预处理$d(n) = \sum_{i=1}^{n} \left \lfloor \frac{n}{i} \right \rfloor$,然后就解决拉(其实是可以乱搞一下然后用线性筛筛的)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int Lim=50000, N=50005;
int p[N], np[N], pcnt, mu[N];
ll d[N];
void init() {
mu[1]=1;
for(int i=2; i<=Lim; ++i) {
if(!np[i]) {
p[pcnt++]=i;
mu[i]=-1;
}
for(int j=0; j<pcnt; ++j) {
int t=p[j]*i;
if(t>Lim) break;
np[t]=1;
if(i%p[j]==0) break;
mu[t]=-mu[i];
}
}
for(int n=1; n<=Lim; ++n) {
for(int i=1, pos=1; i<=n; i=pos+1) {
pos=n/(n/i);
d[n]+=(ll)(pos-i+1)*(n/i);
}
mu[n]+=mu[n-1];
}
}
void work() {
int n, m;
ll ans=0;
scanf("%d%d", &n, &m);
if(n>m) {
swap(n, m);
}
for(int i=1, pos=1; i<=n; i=pos+1) {
pos=min(n/(n/i), m/(m/i));
ans+=(ll)(mu[pos]-mu[i-1])*d[n/i]*d[m/i];
}
printf("%lld\n", ans);
}
int main() {
int T;
scanf("%d", &T);
init();
while(T--) {
work();
}
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]约数个数和

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3994 题解: 莫比乌斯反演 (先定义这样一个符号[x],如果x为true,则[x]=1,否则 ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. [Unity3d]游戏中子弹碰撞的处理

    如果使用Collider+Rigidbody的方式来处理,则它是每一帧进行判定碰撞:如果子弹过快导致碰撞发生在2帧之间,则会导致无法捕获这个碰撞效果 基于上述原因,我们要使用射线Raycast进行子弹 ...

  2. Texstudio中文乱码问题

    参考 http://blog.csdn.net/lanbing510/article/details/8723619 1. 用XeLatex编译,这样生成的pdf没有乱码 2.在texstudio中E ...

  3. php判断str是否是xml格式

    function xml_parser($str){ $xml_parser = xml_parser_create(); if(!xml_parse($xml_parser,$str,true)){ ...

  4. Linux date命令详解

    1.显示时间 date命令可以按照指定格式显示日期,只键入date则以默认格式显示当前时间.如下: 如果需要以指定的格式显示日期,可以使用“+”开头的字符串指定其格式,详细格式如下: %n : 下一行 ...

  5. css动画 animation

    今天用css做了一个简单的三角上下移动的一个小动画,说白了就是在改变该物体的height值.除了这个方法,还可以用js. 一.在用css写动画时,一定要记住兼容性问题.如何解决该兼容性?在前面加内核前 ...

  6. 好代码系列(一):LazyObject

    site-packages/django/utils/functional.py def new_method_proxy(func): def inner(self, *args): if self ...

  7. display_inline-block_table-cell

    1.display:inline-block; 兼容性:兼容到IE7+,Chrome,Firefox html: <ul class="list"> <li> ...

  8. windows7 启用管理员账户

    在虚拟机中安装了windows7,方便使用qq,使用百度云,office等常用的软件.虚拟机使用的oracle的VirtualBox,个人使用体验不错,最棒的功能是能将物理机中的磁盘映射到虚拟机中网络 ...

  9. Spring 定时器Quartz的用法

    Spring定时器Quartz的用法也很简单,需要引入quartz-all-1.5.2.jar java代码如下: package com.coalmine.desktop; import java. ...

  10. iOS创建自定义的xib视图,不带控制器调用

    1 我们平常使用视图都是在控制器中加载各种视图,但是有时候一个单独的视图,弄一个控制器未免有些显得太沉重了,所以我们现在来创建一个带xib加载视图的自定义视图 2 创建一个视图类集成uiview 3 ...