题目描述

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

输入

输入文件包含多组测试数据。

第一行,一个整数T,表示测试数据的组数。
接下来的T行,每行两个整数N、M。

输出

T行,每行一个整数,表示你所求的答案。

样例输入

2
7 4
5 6

样例输出

110
121


题解

莫比乌斯反演

根据 bzoj4176 推出的结论,

那么就有:

预处理mu及其前缀和。

由于要处理多组询问,所以需要用O(n√n)的时间预处理出f,然后对于每组询问分块来求。

#include <cstdio>
#include <algorithm>
#define N 50010
using namespace std;
typedef long long ll;
const int n = 50000;
int mu[N] , sum[N] , prime[N] , tot , f[N];
bool np[N];
ll cal(int a , int b)
{int i , last;ll ans = 0;for(i = 1 ; i <= a && i <= b ; i = last + 1) last = min(a / (a / i) , b / (b / i)) , ans += (ll)(sum[last] - sum[i - 1]) * f[a / i] * f[b / i];return ans;
}
int main()
{int i , j , last , T , a , b;mu[1] = sum[1] = 1;for(i = 2 ; i <= n ; i ++ ){if(!np[i]) mu[i] = -1 , prime[++tot] = i;for(j = 1 ; j <= tot && i * prime[j] <= n ; j ++ ){np[i * prime[j]] = 1;if(i % prime[j] == 0){mu[i * prime[j]] = 0;break;}else mu[i * prime[j]] = -mu[i];}sum[i] = sum[i - 1] + mu[i];}for(i = 1 ; i <= n ; i ++ )for(j = 1 ; j <= i ; j = last + 1)last = i / (i / j) , f[i] += (last - j + 1) * (i / j);scanf("%d" , &T);while(T -- ) scanf("%d%d" , &a , &b) , printf("%lld\n" , cal(a , b));return 0;
}

转载于:https://www.cnblogs.com/GXZlegend/p/7000194.html

【bzoj3994】[SDOI2015]约数个数和 莫比乌斯反演相关推荐

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

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

  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]约数个数和 (莫比乌斯反演)

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

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

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

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

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

  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. bzoj千题计划203:bzoj3994: [SDOI2015]约数个数和

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

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

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

  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. Delphi调用java开发的WebService,传入参数出错
  2. 海量大数据处理最新面试题-1
  3. C++ 中内存分配和回收
  4. mysqldatareader获取整行数据给datarow_C# sqladapter 与sqldataReader
  5. 解决开机自检D盘问题
  6. mybatis简介-什么是Mybatis
  7. eclipse maven jetty插件方式启动项目
  8. 基于VS2017的Docker Support体检ASP.NET Core站点的Docker部署
  9. 在Windows系统中下载并安装Docker-desktop
  10. Document API
  11. linux服务器启动过程
  12. python基础30个常用代码-即学即用的 30 段 Python 实用代码
  13. linux中jdk添加字体_LINUX下JDK安装字体
  14. 嵌入式软件开发与互联网软件开发模式差异
  15. word中如何去掉页眉横线?
  16. 支付宝和微信支付用户付款码条码规则
  17. 完全平方数的几种判定方法与算法用时
  18. CTO、技术总监、首席架构师的区别
  19. Python使用turtle绘图中设置小乌龟(画笔)旋转的角度turtle.setheading()
  20. ubuntu16.04 安装微信客户端

热门文章

  1. R语言blotter包回测实例
  2. 银行现在都很缺钱吗,为什么给的利息比以前高了?
  3. 街头抓拍之一:酷似福克纳的老头
  4. python partition by函数_python – 避免Spark窗口函数中单个分区模式的性能影响
  5. 婚宴座位图html5,图解现代婚宴座位安排
  6. matlab中m文件的作用,M文件主要包含()_matlab中m文件的好处
  7. python list转换成树形结构_python递归查询菜单并转换成json实例
  8. python与excel互通_【python】python vs Excel ( 与mysql数据库之间的交互)
  9. android使用桢布局,Android 常用布局
  10. this关键字+super关键字