题目大意:略

洛谷传送门

首先要知道这样一个公式不知道这个公式这道题还怎么做...

$d(ij)=\sum\limits_{x=1}^{i} \sum\limits_{y=1}^{j}[gcd(x,y)==1]$

具体证明可以参考这位神犇的博客

大意是说,令$k=i \cdot j$,把$k,i,j$都分解成质因子幂次乘积的形式

那么对于其中一个质因子$p$,$k,i,j$里,$p$的幂次分别为$c,a,b$

那么因为$p^{c}=p^{a} \cdot p^{b},c=a+b$

对于$k$的所有约数,$p$能取的幂次是$0,1,2...c$,一共$c+1=a+b+1$种取值

而在上述式子中,保证$x,y$互质,则$x,y$中$p$的指数,$x$取$0$,$y$取$[1,b]$,或者$x$取$[1,a]$,$y$取$0$,或者$x,y$都取$0$,一共$a+b+1$种取值,和上述论证吻合

而质因子之间互不影响,所以推广到多个质因子上,这个结论依然是正确的

进入正题,我们有了这个公式,下面的推导就十分经典套路了

$\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m} \sum\limits_{x|i} \sum\limits_{y|j} [gcd(x,y)==1]$

$\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{m} \sum\limits_{x|i} \sum\limits_{y|j} \sum\limits_{d|gcd(x,y)} \mu(d)$

$\sum\limits_{d=1}^{n} \mu(d) \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\sum\limits_{x|i}\sum\limits_{y|j}[d|gcd(x,y)]$

$\sum\limits_{d=1}^{n} \mu(d) \sum\limits_{x=1}^{n}\sum\limits_{y=1}^{m} \left \lfloor \frac{n}{x} \right \rfloor \left \lfloor \frac{m}{y} \right \rfloor [d|gcd(x,y)]$

$\sum\limits_{d=1}^{n} \mu(d) \sum\limits_{x=1}^{n} \left \lfloor \frac{n}{dx} \right \rfloor \sum\limits_{y=1}^{m} \left \lfloor \frac{m}{dy} \right \rfloor$

令$g(n)=\sum\limits_{x=1}^{n} \left \lfloor \frac{n}{x} \right \rfloor$

则$\sum\limits_{d=1}^{n} \mu(d) g(\left \lfloor \frac{n}{d} \right \rfloor) g(\left \lfloor \frac{m}{d} \right \rfloor )$

$g(n)$可以利用整除分块的思想在$O(n\sqrt n)$的时间内预处理出来

对于每个询问也用整除分块求解即可,总时间$O(T\sqrt n+n\sqrt n)$

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define N1 50010
 5 #define ll long long
 6 #define dd double
 7 #define inf 2147483647
 8 #define maxn 50000
 9 using namespace std;
10
11 ll g[N1];
12 int pr[N1],mu[N1],smu[N1],use[N1],cnt;
13 void init()
14 {
15     int n,i,j,la;
16     for(n=1;n<=maxn;n++)
17     {
18         for(i=1;i<=n;i=la+1)
19         {
20             la=(n/(n/i));
21             g[n]+=1ll*(la-i+1)*(n/i);
22         }
23     }
24     for(mu[1]=smu[1]=1,i=2;i<=maxn;i++)
25     {
26         if(!use[i]){ pr[++cnt]=i; mu[i]=-1; }
27         for(j=1;j<=cnt&&i*pr[j]<=maxn;j++)
28         {
29             use[i*pr[j]]=1;
30             if(i%pr[j]){ mu[i*pr[j]]=-mu[i]; }
31             else break;
32         }
33         smu[i]=smu[i-1]+mu[i];
34     }
35 }
36 int n,m,T;
37
38 int main()
39 {
40     scanf("%d",&T);
41     init();
42     int i,j,la;ll ans=0; ll inv,y;
43     while(T--)
44     {
45         scanf("%d%d",&n,&m); if(n>m) swap(n,m); ans=0;
46         for(i=1;i<=n;i=la+1)
47         {
48             la=min(n/(n/i),m/(m/i));
49             ans+=1ll*(smu[la]-smu[i-1])*g[n/i]*g[m/i];
50         }
51         printf("%lld\n",ans);
52     }
53     return 0;
54 }

转载于:https://www.cnblogs.com/guapisolo/p/10223833.html

BZOJ 3994 [SDOI2015]约数个数和 (莫比乌斯反演)相关推荐

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

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

  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. LeetCode中等题之删除链表的中间节点
  2. 何恺明一作论文 MAE 已有人复现!PyTorch 版!(附链接)
  3. 当一个程序员面临太多选择的时候
  4. ubuntu下安装mysql及常用操作
  5. c语言判断整数_C语言技能|(草稿,不断完善中...)
  6. jQuery高度及位置操作
  7. PHP公鸡五文钱,公鸡
  8. 华为Mate30系列前面板曝光:双曲面刘海屏再获证实
  9. 通过CentOS克隆虚拟机后发现无法启动网卡或无法上网的解决办法
  10. redis连接php
  11. opencv 图像读写显示、matplotlib 库图像读写显示
  12. docker数据卷之dockerfile
  13. Git学习笔记之廖雪峰Git教程
  14. hill密码 java_希尔密码(Hill Cipher)的实现
  15. python面板数据模型操作步骤_面板模型回归操作指南,适合初学者!
  16. category-内部原理、运用场景、特点
  17. 13. 查询表orders——统计销售总量大于50的各类商品的ID和销售总量
  18. v4l2架构专题模块handler分析 --- handler的初始化及handler ctrl注册
  19. 大数据开发之在idea中开发第一个hadoop程序
  20. MethodHandle.invoke and MethodHandle.invokeExact are only supported starting with Android O

热门文章

  1. DataTable是否存在某个列的判断
  2. [转贴]Cocos2d-x3.2与OpenGL渲染总结(一)Cocos2d-x3.2的渲染流程
  3. 位运算应用口诀和实例(转自大笨狼)
  4. 美玉待琢——《一本写满评论的艾泽拉斯收藏指南》
  5. mongoose --- 建立一个集合规则,并导出.
  6. Day03:文件打开;错误处理
  7. Vue 父子组件间的通信
  8. 走在网页游戏开发的路上(十)
  9. 从C语言到C++成长经历所得的一些技巧和感悟
  10. 【Android】 -- 使用UncaughtExceptionHandler捕捉全局异常