Sol

首先有个结论
\(\sum_{i=1}^{m}\sum_{j=1}^{n}d(i*j)=\sum_{i=1}^{m}\sum_{j=1}^{n}\sum_{x|i}\sum_{y|i}[gcd(x,y)==1]\)
证明:可以看po姐的博客

接着这个式子推
\[ 原式=\sum_{x=1}^{n}\sum_{y=1}^{m}([gcd(x, y)==1] * \sum_{x|i}\sum_{y|i} 1)\\ =\sum_{x=1}^{n}\sum_{y=1}^{m}[gcd(x, y)==1\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor]\\ 设f(i)=\sum_{x=1}^{n}\sum_{y=1}^{m}[gcd(x, y)==i\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor]\\ 设g(i)=\sum_{x|d}f(d) \]
f(i)可以通过莫比乌斯反演求出
考虑求g(i)
\[ g(i)=\sum_{i|gcd(x,y)}\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor\\ =\sum_{i|x}\sum_{i|y}\lfloor\frac{n}{x}\rfloor\lfloor\frac{m}{y}\rfloor\\ =\sum_{x=1}^{\lfloor\frac{n}{i}\rfloor}\sum_{y=1}^{\lfloor\frac{m}{y}\rfloor}\lfloor\frac{n}{x*i}\rfloor\lfloor\frac{m}{y*i}\rfloor\\ 换个元=\sum_{i=1}^{x}\sum_{j=1}^{y}\lfloor\frac{x}{i}\rfloor\lfloor\frac{y}{j}\rfloor\\ \]
这个东西\(\sum_{i=1}^{x}\lfloor\frac{x}{i}\rfloor\)就是每个数的倍数的个数和的和,就是每个数约数的个数和的和预处理一下,前缀和一下就好,于是每个g(i)就可以O(1) 求。。。(约数的个数是积性函数,也可以线性筛)
数论分块什么的就不说了

# include <bits/stdc++.h>
# define RG register
# define IL inline
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll;
const int _(5e4 + 1);IL ll Read(){char c = '%'; ll x = 0, z = 1;for(; c > '9' || c < '0'; c = getchar()) if(c == '-') z = -1;for(; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - '0';return x * z;
}int prime[_], mu[_], d[_], pred[_], num;
bool isprime[_];IL void Prepare(){isprime[1] = 1; mu[1] = d[1] = 1;for(RG int i = 2; i < _; ++i){if(!isprime[i]){  prime[++num] = i; mu[i] = -1; d[i] = 2; pred[i] = 1;  }for(RG int j = 1; j <= num && i * prime[j] < _; ++j){isprime[i * prime[j]] = 1;if(i % prime[j]){  mu[i * prime[j]] = -mu[i]; d[i * prime[j]] = d[i] * 2; pred[i * prime[j]] = 1;  }else{mu[i * prime[j]] = 0;pred[i * prime[j]] = pred[i] + 1;d[i * prime[j]] = d[i] / (pred[i] + 1) * (pred[i] + 2);break;}}d[i] += d[i - 1]; mu[i] += mu[i - 1];}
}int main(RG int argc, RG char *argv[]){Prepare();for(RG int T = Read(); T; --T){RG int n = Read(), m = Read(); RG ll ans = 0;if(n > m) swap(n, m);for(RG int i = 1, j; i <= n; i = j + 1){j = min(n / (n / i), m / (m / i));ans += 1LL * (mu[j] - mu[i - 1]) * d[n / i] * d[m / i];}printf("%lld\n", ans);}return 0;
}

转载于:https://www.cnblogs.com/cjoieryl/p/8259805.html

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

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

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

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

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

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

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

  4. [BZOJ3994][SDOI2015]约数个数和

    3994: [SDOI2015]约数个数和 Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 1104  Solved: 762 [Submit][St ...

  5. 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 ...

  6. 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, ...

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

  8. SDOI2015 约数个数和(莫比乌斯反演经典、双上限整除分块)超详细笔记

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 AcWing 1358. 约数个数和(莫比乌斯反演经典.双上限整除分块) #include <c ...

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

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

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

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

最新文章

  1. FFmpeg 音视频同步
  2. 三元表达式 列表递推 生成器表达式
  3. dotnet core webapi +vue 搭建前后端完全分离web架构(一)
  4. Numpy高维数据的理解
  5. php判断ipv6是否在范围内,[PHP] IPv6檢查IP是否在某個網段內 mtachcidr6
  6. jdk1.8 Windows安装全过程详尽版
  7. html表单基础知识,【学习笔记】html基础知识第四更/与用户交互!(表单标签)...
  8. esp32 python开发环境搭建_ESP32:搭建Ubuntu开发环境
  9. Vue 自定义项目的创建以及配置
  10. 取之盈--别人轻松月薪过万,都是怎样高效学习的?
  11. 工行网银 火狐浏览器
  12. 短信验证码校验的实现
  13. 看这里!有个奔向月薪7万的程序员专属规划!
  14. 用友NC平台之基本概念解析(一)
  15. babylon.js实战教程
  16. 学生管理系统课程设计
  17. 彩光价格一般是多少_彩光祛斑价格一般是多少呢?
  18. [渝粤教育] 中国地质大学 企业文化建设与管理 复习题 (2)
  19. kafka-eagle部署与使用
  20. JAVA8 Supplier接口

热门文章

  1. 数据导出生成word附件使用POI的XWPFTemplate对象
  2. 前后端交互中,返回前端的自定义响应数据结构
  3. windows下快速启动或关闭系统服务方法
  4. Heap 3214 LIS题解
  5. 关于archlinux下的ralink5370网卡
  6. knockoutJS学习笔记01:从拼接字符串到编写模板引擎
  7. C++第10周项目2扩展之2参考——迭代求和
  8. 大家放松下,仿《大腕》经典对白
  9. 什么是Cortex、ARMv8、arm架构、ARM指令集、soc
  10. java项目皮肤包_java swing项目皮肤包+使用方法说明