Description

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

Input

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

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

Output

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

Sample Input

2
7 4
5 6

Sample Output

110
121

解题思路:

有一个喜闻乐见的结论:

${\sum_{i=1}^{n}}{\sum_{j=1}^{m}}{d(i*j)]}={\sum_{i=1}^{n}}{\sum_{j=1}^{m}}[gcd(i,j)==1]{\left \lfloor \frac{N}{i} \right \rfloor}{\left \lfloor \frac{M}{j} \right \rfloor}$

剩下的大家都会了吧QAQ

代码:

  1. #include<map>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. const int N=;
  6. struct lnt{
  7. std::map<unsigned int,long long>Arr;
  8. long long arr[N];
  9. bool has[N];
  10. void Insert(unsigned int x,long long y)
  11. {
  12. if(x<N)
  13. arr[x]=y,has[x]=true;
  14. else
  15. Arr[x]=y;
  16. }
  17. bool find(unsigned int x)
  18. {
  19. if(x<N)
  20. return has[x];
  21. else
  22. return Arr.find(x)!=Arr.end();
  23. }
  24. long long val(unsigned int pos)
  25. {
  26. if(pos<N)
  27. return arr[pos];
  28. return Arr[pos];
  29. }
  30. };
  31. unsigned int prime[N];
  32. int phi[N];
  33. int miu[N];
  34. bool vis[N];
  35. unsigned int cnt;
  36. lnt Sum_phi;
  37. lnt Sum_miu;
  38. void gtp(void)
  39. {
  40. miu[]=phi[]=;
  41. Sum_phi.Insert(,);
  42. Sum_miu.Insert(,);
  43. for(int i=;i<N;i++)
  44. {
  45. if(!vis[i])
  46. {
  47. prime[++cnt]=i;
  48. miu[i]=-;
  49. phi[i]=i-;
  50. }
  51. for(int j=;j<=cnt&&i*prime[j]<N;j++)
  52. {
  53. vis[i*prime[j]]=true;
  54. if(i%prime[j]==)
  55. {
  56. miu[i*prime[j]]=;
  57. phi[i*prime[j]]=phi[i]*prime[j];
  58. break;
  59. }
  60. miu[i*prime[j]]=-miu[i];
  61. phi[i*prime[j]]=phi[i]*(prime[j]-);
  62. }
  63. }
  64. for(int i=;i<N;i++)
  65. {
  66. Sum_phi.Insert(i,Sum_phi.val(i-)+phi[i]);
  67. Sum_miu.Insert(i,Sum_miu.val(i-)+miu[i]);
  68. }
  69. return ;
  70. }
  71. long long PHI_search(unsigned int pos)
  72. {
  73. if(Sum_phi.find(pos))
  74. return Sum_phi.val(pos);
  75. long long tmp=;
  76. for(unsigned int i=,j;i<=pos;i=j+)
  77. {
  78. j=pos/(pos/i);
  79. tmp+=PHI_search(pos/i)*(long long)(j-i+);
  80. }
  81. Sum_phi.Insert(pos,1ll*pos*(pos+)/-tmp);
  82. return 1ll*pos*(pos+)/-tmp;
  83. }
  84. long long MIU_search(unsigned int pos)
  85. {
  86. if(Sum_miu.find(pos))
  87. return Sum_miu.val(pos);
  88. long long tmp=;
  89. for(unsigned int i=,j;i<=pos;i=j+)
  90. {
  91. j=pos/(pos/i);
  92. tmp+=(j-i+)*MIU_search(pos/i);
  93. }
  94. Sum_miu.Insert(pos,-tmp);
  95. return -tmp;
  96. }
  97. int main()
  98. {
  99. gtp();
  100. int T;
  101. scanf("%d",&T);
  102. while(T--)
  103. {
  104. int x;
  105. scanf("%d",&x);
  106. printf("%lld %lld\n",PHI_search(x),MIU_search(x));
  107. }
  108. return ;
  109. }

BZOJ3994: [SDOI2015]约数个数和(莫比乌斯反演)的更多相关文章

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

    P3327 [SDOI2015]约数个数和 莫比乌斯反演 链接 luogu 思路 第一个式子我也不会,luogu有个证明,自己感悟吧. \[d(ij)=\sum\limits_{x|i}\sum\li ...

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

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

  3. [BZOI 3994] [SDOI2015]约数个数和(莫比乌斯反演+数论分块)

    [BZOI 3994] [SDOI2015]约数个数和 题面 设d(x)为x的约数个数,给定N.M,求\(\sum _{i=1}^n \sum_{i=1}^m d(i \times j)\) T组询问 ...

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

    ---题面--- 题解: 为什么SDOI这么喜欢莫比乌斯反演,,, 首先有一个结论$$d(ij) = \sum_{x|i}\sum_{y|j}[gcd(x, y) == 1]$$为什么呢?首先,可以看 ...

  5. luogu P3327 [SDOI2015]约数个数和 莫比乌斯反演

    题面 我的做法基于以下两个公式: \[[n=1]=\sum_{d|n}\mu(d)\] \[\sigma_0(i*j)=\sum_{x|i}\sum_{y|j}[gcd(x,y)=1]\] 其中\(\ ...

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

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

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

    https://www.lydsy.com/JudgeOnline/problem.php?id=3994 https://blog.csdn.net/qq_36808030/article/deta ...

  8. bzoj3994: [SDOI2015]约数个数和(反演+结论?!)

    这题做的历程堪称惊心动魄 刚刚学了莫比乌斯反演的我高高兴兴的和cbx一起反演式子 期间有突破,有停滞,有否定 然后苟蒻的我背着cbx偷偷打开了题解 看到了 我...... 去你的有个性质啊(当然还是自 ...

  9. 洛谷P3327 [SDOI2015]约数个数和(莫比乌斯反演)

    题目描述 设d(x)为x的约数个数,给定N.M,求 \sum^N_{i=1}\sum^M_{j=1}d(ij)∑i=1N​∑j=1M​d(ij) 输入输出格式 输入格式: 输入文件包含多组测试数据.第 ...

随机推荐

  1. GoldenGate 应用系统升级

    (仅复制DML时)源端和目标端数据库增减复制表 增加复制表 在GoldenGate的进程参数中,如果通过*来匹配所有表,因此只要符合*所匹配的条件,那么只要在源端建立了表之后GoldenGate就能自 ...

  2. 消除textarea的空格de长度值

    在项目中因为用到文本域textarea输入textarea的长度总是显示 25 那是还怀疑textarea自带有value长度? placeholder属性的长度? 那时候想到类似:ul无序列表li元 ...

  3. 【转】C#中RSA加密解密和签名与验证的实现

    [转]C#中RSA加密解密和签名与验证的实现 RSA加密算法是一种非对称加密算法.在公钥加密标准和电子商业中RSA被广泛使用.RSA是1977年由罗纳德•李维斯特(Ron Rivest).阿迪•萨莫尔 ...

  4. 【转】CentOS下firefox安装flash说明

    http://www.cnblogs.com/lamper/archive/2013/01/16/2862254.htm CentOS下自带了firefox,但没有flash插件的,按它自己的提示安装 ...

  5. dynamic_cast与能力查询

    在C++里面,dynamic_cast 通常用于横向转换,而不是向上或者向下的转换. 这个常常用于检查某个实例,是否实现了某个接口类,那么就把这个实例,用dynamic_cast来转换成这个接口类的实 ...

  6. [React Native] Use the SafeAreaView Component in React Native for iPhone X Compatibility

    In this lesson, you will learn how to use the SafeAreaView component to avoid the sensor cluster (th ...

  7. LINUX 系统初始化脚本

    #!/bin/bash ######the system first start configuretion #####for install  ####copy right by donglei## ...

  8. Id选择器和Class选择器

    http://www.runoob.com/css/css-id-class.html http://www.w3school.com.cn/css/css_syntax_id_selector.as ...

  9. Entity Framework之Code First开发方式

    一.Code First Code First方式只需要代码,不需要Edmx模型.EF通过实体类型结构推断生成SQL并创建数据库中的表.开发人员只需要编写实体类就可以进行EF数据库的开发. Code ...

  10. spring xml配置文件根元素(文件头文件)说明

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...