2015

题意:\(d(i)\)为i的约数个数,求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m d(ij)\)


\(ij\)都爆int了....
一开始想容斥一下用\(d(i)\)和\(d(j)\)算\(d(ij)\),发现不行...
然后翻题解看到了一步好神的转化:
\[ d(nm) = \sum_{i\mid n} \sum_{j\mid m} [gcd(i,j)=1] \]
晚上再补吧还是没拿草稿纸...

补:
\(Proof.\)

  • 首先注意约数个数 相同的算一个
    约数个数公式\(\prod (a_i+1)\)
    考虑一个质因子,\(p^x,p^y \rightarrow p^x p^y\)
    \(x+y+1\)对应了\(gcd(p^x, 1)...gcd(1, 1)...gcd(1,p^y)\)
    质因子相互独立,乘起来

然后愉♂悦的套路推♂倒
\[ \begin{align*} \sum_{i=1}^n \sum_{j=1}^m d(ij) &= \sum_{i=1}^n \sum_{j=1}^m \sum_{x\mid i} \sum_{y\mid j} [gcd(x,y)=1]\\ 先枚举约数,交换i,j\ x,y\\ &=\sum_{i=1}^n \sum_{j=1}^m \sum_{d\mid i,d\mid j}\mu(d) \frac{n}{i} \frac{m}{i}\\ &=\sum_{d=1}^n \mu(d)\sum_{i=1}^\frac{n}{i} \sum_{j=1}^\frac{m}{i} \frac{n}{id}\frac{m}{jd}\\ &=\sum_{d=1}^n \mu(d) f(\frac{n}{id})f(\frac{m}{jd})\\ \end{align*} \]
问题就是\(f(n)=\sum_{i=1}^n\frac{n}{i}\)怎么求了
可以n根n预处理...
更巧妙的做法是,发现\(f\)就是\(d\)的前缀和,因为\(\frac{n}{i}\)表示的就是\(1..n\)有几个i的倍数

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=5e4+5;
typedef long long ll;
#define pii pair<int, int>
#define MP make_pair
#define fir first
#define sec second
inline int read(){char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
}int n, m;
int notp[N], p[N], mu[N]; ll f[N]; pii lp[N];
void sieve(int n) {mu[1] = 1; f[1] = 1;for(int i=2; i<=n; i++) {if(!notp[i]) p[++p[0]] = i, mu[i] = -1, f[i] = 2, lp[i] = MP(i, 1);for(int j=1; j<=p[0] && i*p[j]<=n; j++) {int t = i*p[j];notp[t] = 1;if(i%p[j] == 0) {mu[t] = 0;lp[t] = MP(p[j], lp[i].sec + 1);f[t] = f[i] / (lp[i].sec + 1) * (lp[t].sec + 1);break;}mu[t] = -mu[i];lp[t] = MP(p[j], 1);f[t] = f[i] * (lp[t].sec + 1);}}for(int i=1; i<=n; i++) mu[i] += mu[i-1], f[i] += f[i-1];
}
ll cal(int n, int m) {ll ans=0; int r;for(int i=1; i<=n; i=r+1) {r = min(n/(n/i), m/(m/i)); ans += (mu[r] - mu[i-1]) * f[n/i] * f[m/i];}return ans;
}
int main() {//freopen("in","r",stdin);sieve(N-1);int T=read();while(T--){n=read(); m=read();if(n>m) swap(n, m);printf("%lld\n",cal(n, m));}
}

BZOJ 3994: [SDOI2015]约数个数和 [莫比乌斯反演 转化]相关推荐

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

    题目大意:略 洛谷传送门 首先要知道这样一个公式不知道这个公式这道题还怎么做... $d(ij)=\sum\limits_{x=1}^{i} \sum\limits_{y=1}^{j}[gcd(x,y ...

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

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

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

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

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

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

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

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

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

  7. BZOJ 3930 Luogu P3172 选数 (莫比乌斯反演)

    BZOJ 3930 Luogu P3172 选数 (莫比乌斯反演) 手动博客搬家:本文发表于20180310 11:46:11, 原地址https://blog.csdn.net/suncongbo/ ...

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

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

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

最新文章

  1. 单元测试以及dagger的使用
  2. 电脑销售技巧_汝州市,如何查询楼盘详细销售数据?官方公布,精确到房间
  3. [云炬ThinkPython阅读笔记]3.4 增加新函数
  4. 【大话数据结构算法】直接选择排序
  5. 如何学习Linux / 新手入门
  6. ABB 机器人 DRVIO_1通信报警
  7. Bootstrap入门(八)组件2:下拉菜单
  8. 实例45:python
  9. 天池 在线编程 队列检查(排序)
  10. VS中依赖库相对路径的配置及项目间依赖项
  11. 操作系统期末总复习(题库)
  12. Java菜鸟教程 基本数据类型(一)
  13. 17个值得收藏的国内外短信接码平台合集
  14. JavaScript 详解(表单验证,JSON,JS事件,JS函数)
  15. 挖金矿问题(c++求解)
  16. 计算机无法从硬盘启动怎么办,电脑开机无法引导硬盘启动怎么解决
  17. SDUT - 表达式语法分析——递归子程序法
  18. 人形机器人视觉处理——走迷宫
  19. Win11如何隐藏输入法悬浮窗?
  20. 计算机上机考试可以粘贴复制吗?

热门文章

  1. 解决在使用numpy.polyfit 时出现的 raise LinAlgError(“SVD did not converge in Linear Least Squares“)错误
  2. 《统计学习方法》资源
  3. Centos7安装Nginx+PHP
  4. 高级软件工程第二次作业
  5. 在C#中,如何连接已加密的Sqlite数据库
  6. NHibernate 中删除数据的几种方法
  7. D - 小晴天老师系列——晴天的后花园
  8. CXF wsdl2java 生成java代码供客户端使用
  9. 解决toad中number类型小数位数过长按科学计数法显示的问题
  10. request对象方法详解