3994: [SDOI2015]约数个数和

Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 1104  Solved: 762 [Submit][Status][Discuss]

Description

设d(x)为x的约数个数,给定N、M,求  

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
图片好像挂了。。。那张图是$\sum_{i=1}^n\sum_{j=1}^m d\left(ij\right)$
如果没挂请忽视上面那排话
由对称性,不妨设$n\le m$
有一个结论$d\left(xy\right)=\sum_{i\mid x}\sum_{j\mid y}\left[gcd\left(i,j\right)=1\right]$
这个证明的话可以考虑每个质因数的贡献。。。意会一下
那么可以得到
$ans=\sum_{x=1}^n\sum_{y=1}^m\sum_{i\mid x}\sum_{j\mid y}\left[gcd\left(i,j\right)=1\right]$
$=\sum_{i=1}^n\sum_{j=1}^m\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{j}\rfloor\left[gcd\left(i,j\right)=1\right]$
$=\sum_{i=1}^n\sum_{j=1}^m\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{j}\rfloor\sum_{d\mid i,d\mid j}\mu\left(d\right)$
$=\sum_{d=1}^n\mu\left(d\right)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}\lfloor\frac{n}{id}\rfloor\lfloor\frac{m}{id}\rfloor$
$=\sum_{d=1}^n\mu\left(d\right)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}\lfloor\frac{\lfloor\frac{n}{d}\rfloor}{i}\rfloor\lfloor\frac{\lfloor\frac{m}{d}\rfloor}{i}\rfloor$
$=\sum_{d=1}^n\mu\left(d\right)\left(\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\lfloor\frac{\lfloor\frac{n}{d}\rfloor}{i}\rfloor\right)\left(\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}\lfloor\frac{\lfloor\frac{m}{d}\rfloor}{i}\rfloor\right)$
令$g\left(n\right)=\sum_{i=1}^n\lfloor\frac{n}{i}\rfloor$
那么$ans=\sum_{d=1}^n\mu\left(d\right)g\left(\lfloor\frac{n}{d}\rfloor\right)g\left(\lfloor\frac{m}{d}\rfloor\right)$
而$g$可以通过枚举每个分子然后不停的往倍数上加$1$,然后扫一遍前缀和求出,我为了用Latex码数学公式现在已经头昏眼花神志不清,如果你觉得我已经开始胡言乱语了导致你没看懂那就看看代码吧
预处理时间复杂度为$O\left(nlnn\right)$
似乎神犇们都是$O\left(n\right)$预处理???我还是太菜了哎
每次询问的话分块求,总时间复杂度$O\left(T\sqrt{n}\right)$
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 50000 + 10;
bool mark[maxn] = {false};
int mu[maxn], g[maxn] = {0}, sum[maxn];
int pri[maxn], prn = 0;
void shai(){mu[1] = 1;for(int i = 2; i < maxn; i++){if(!mark[i]){mu[i] = -1;pri[++prn] = i;}for(int j = 1; j <= prn && pri[j] * i < maxn; j++){mark[i * pri[j]] = true;if(i % pri[j] == 0){mu[i * pri[j]] = 0;break;}else mu[i * pri[j]] = -mu[i];}}for(int i = 1; i < maxn; i++)for(int j = i; j < maxn; j += i)g[j]++;sum[0] = g[0] = 0;for(int i = 1; i < maxn; i++){sum[i] = mu[i] + sum[i - 1];g[i] += g[i - 1];}
}
int main(){shai();int T, n, m;ll ans;scanf("%d", &T);while(T--){scanf("%d %d", &n, &m);if(n > m) swap(n, m);ans = 0;for(int p, i = 1; i <= n; i = p + 1){p = min(n / (n / i), m / (m / i));ans += (ll) (sum[p] - sum[i - 1]) * g[n / p] * g[m / p];}printf("%lld\n", ans);}return 0;
}

转载于:https://www.cnblogs.com/ruoruoruo/p/7678841.html

[BZOJ3994][SDOI2015]约数个数和相关推荐

  1. [bzoj3994] [SDOI2015]约数个数和

    Description 设d(x)为x的约数个数,给定N.M,求 \(\sum_{i=1}^N\sum_{j=1}^Md(ij)\) Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测 ...

  2. bzoj千题计划203:bzoj3994: [SDOI2015]约数个数和

    http://www.lydsy.com/JudgeOnline/problem.php?id=3994 设d(x)为x的约数个数,给定N.M,求 用到的一个结论: 证明: 枚举n的约数i,枚举m的约 ...

  3. 【BZOJ3994】[SDOI2015]约数个数和 莫比乌斯反演

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

  4. [SDOI2015]约数个数和【莫比乌斯反演】

    [SDOI2015]约数个数和 题意:\(d(x)\)为\(x\)的约数个数,求\(\sum_{i=1}^n\sum{j=1}^md(ij)\) 由结论得\[ans=\sum_{i=1}^n\sum_ ...

  5. 洛谷 [SDOI2015]约数个数和 解题报告

    [SDOI2015]约数个数和 题目描述 设\(d(x)\)为\(x\)的约数个数,给定\(N,M\),求$ \sum\limits^N_{i=1}\sum\limits^M_{j=1}d(ij)$ ...

  6. P3327 [SDOI2015]约数个数和 (mobius反演)

    P3327 [SDOI2015]约数个数和 推导过程 求∑i=1n∑j=1md(ij)\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} d(ij)∑i=1n​∑j=1m​d(ij ...

  7. P3327 [SDOI2015]约数个数和

    P3327 [SDOI2015]约数个数和 题意: 设 d(x) 为 x 的约数个数,给定 n,m,求 ∑i=1n∑j=1md(i,j)\sum_{i=1}^{n}\sum_{j=1}^{m}d(i, ...

  8. luogu P3327 [SDOI2015]约数个数和(rng58-clj等式)

    luogu P3327 [SDOI2015]约数个数和(rng58-clj等式) 题目大意 设d(x)d(x)d(x)为x的因子的个数,给出N和M求 ∑i=1n∑j=1md(i,j)\sum_{i=1 ...

  9. 【bzoj3994】[SDOI2015]约数个数和 莫比乌斯反演

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

最新文章

  1. Python 切片的简单讲解
  2. Cisco路由器——Console线的接法
  3. windows 系统nginx做反向代理实例
  4. 无线数传模块SI4463、SI4438、SI4432方案无线通信比对
  5. python结果导入excel_荐Python读取、写入EXCEL,处理数据完成运算具体实例及代码,Pycharm中导入库的操作流程...
  6. 计算机专业师资描述,计算机专业师资队伍建设6主持建设优质核心课或教科研课题相关材料.doc...
  7. 巧解汽车冬季病 启动无力别“轰油”热车
  8. 345. Reverse Vowels of a String【easy】
  9. spark 两个rdd求交集,差集,并集
  10. C/C++[codeup 1943](大数)进制转换
  11. 福利:阿里巴巴Java开发手册(第2版)
  12. 用excel做logistic回归分析_用Excel做回归分析的详细步骤
  13. 解读:大数据分析及其数据来源
  14. 初等函数的麦克劳林级数展开+逆函数的展开求法
  15. html上图片用js绘制点,用 js + html 描图 与画箭头
  16. 深入Kubernetes 之 DaemonSet :容器化守护进程
  17. 米公益完结项目结项反馈——环保梦想,你我一同点亮
  18. windows10无法搜索计算机,Win10电脑搜索功能不能用怎么办?
  19. 模仿卖座网的App maizuo
  20. 2021资源网源码二开模板

热门文章

  1. Java字符串编码和转换操作
  2. TensorFlow(四)优化器函数Optimizer
  3. 利用colab保存模型_在Google Colab上训练您的机器学习模型中的“后门”
  4. 逾期了,如何消除不良记录?
  5. 去银行贷款,有中介和没中介的巨大差别
  6. 如何避免偶然的锁存器和%0h
  7. 很好的Android论坛
  8. 如何映射本地虚拟机或远程服务器磁盘到本地
  9. php的修改数据库语句怎么写,php的数据库修改语句是什么
  10. php中pandans,Python地信专题 | 基于geopandas的空间数据分析-文件IO篇