【LG2257】YY的GCD

题面

洛谷

题解

题目大意:

给定\(n,m\)求\(\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)为质数]\)。

我们设\(f(x)=[x为质数]\),需要找到一个\(g\)使得\(f=1*g\),那么\(g=\mu*f\)

\[g(x)=\sum_{d|x}\mu(\frac{x}{d})*f(d)=\sum_{p|x}\mu(\frac{x}{p})
\]

这样的话,我们要求的就是

\[\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{d|i,d|j}g(d)\\
=\sum_{d=1}^{min(n,m)}g(d)\sum_{i=1}^{n}\sum_{j=1}^{m}[d|i][d|j]\\
=\sum_{d=1}^{min(n,m)}g(d)\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor
\]

可以用数论分块求出

代码

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cstring>
  5. #include <cmath>
  6. #include <algorithm>
  7. using namespace std;
  8. inline int gi() {
  9. register int data = 0, w = 1;
  10. register char ch = 0;
  11. while (!isdigit(ch) && ch != '-') ch = getchar();
  12. if (ch == '-') w = -1, ch = getchar();
  13. while (isdigit(ch)) data = 10 * data + ch - '0', ch = getchar();
  14. return w * data;
  15. }
  16. typedef long long ll;
  17. const int MAX_N = 1e7 + 5;
  18. const int MAX = 1e7;
  19. bool is_prime[MAX_N];
  20. int prime[MAX_N], num, mu[MAX_N], s[MAX_N], f[MAX_N];
  21. void sieve() {
  22. for (int i = 1; i <= MAX; i++) is_prime[i] = 1;
  23. is_prime[1] = 0, mu[1] = 1;
  24. for (int i = 2; i <= MAX; i++) {
  25. if (is_prime[i]) prime[++num] = i, mu[i] = -1;
  26. for (int j = 1; j <= num && i * prime[j] <= MAX; j++) {
  27. is_prime[i * prime[j]] = 0;
  28. if (i % prime[j] == 0) break;
  29. mu[i * prime[j]] = -mu[i];
  30. }
  31. }
  32. for (int i = 1; i <= num; i++)
  33. for (int j = 1; prime[i] * j <= MAX; j++)
  34. f[j * prime[i]] += mu[j];
  35. for (int i = 1; i <= MAX; i++) s[i] = s[i - 1] + f[i];
  36. }
  37. ll solve(int a, int b) {
  38. ll ans = 0;
  39. if (a > b) swap(a, b);
  40. for (int l = 1, r = 0; l <= a; l = r + 1) {
  41. r = min(a / (a / l), b / (b / l));
  42. ans += 1ll * (s[r] - s[l - 1]) * (a / l) * (b / l);
  43. }
  44. return ans;
  45. }
  46. int main () {
  47. #ifndef ONLINE_JUDGE
  48. freopen("cpp.in", "r", stdin);
  49. #endif
  50. sieve();
  51. int T = gi(), N, M;
  52. while (T--) {
  53. N = gi(), M = gi();
  54. printf("%lld\n", solve(N, M));
  55. }
  56. return 0;
  57. }

【LG2257】YY的GCD的更多相关文章

  1. BZOJ2820/LG2257 YY的GCD 莫比乌斯反演

    问题描述 BZOJ2820 LG2257 题解 求 \(\sum\limits_{i=1}^{n}{\sum\limits_{j=1}^{m}{[gcd(i,j)==p]}}\) ,其中 \(p\)为 ...

  2. BZOJ 2820: YY的GCD [莫比乌斯反演]【学习笔记】

    2820: YY的GCD Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1624  Solved: 853[Submit][Status][Discu ...

  3. [BZOJ2820]YY的GCD

    [BZOJ2820]YY的GCD 试题描述 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少 ...

  4. bzoj 2820 YY的GCD 莫比乌斯反演

    题目大意: 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 这里就抄一下别人的推断过程了 后面这个g(x) 算的方法就是在线性 ...

  5. 【BZOJ】【2820】YY的GCD

    莫比乌斯反演 PoPoQQQ讲义第二题. 暴力枚举每个质数,然后去更新它的倍数即可,那个g[x]看不懂就算了…… 为什么去掉了一个memset就不T了→_→…… /****************** ...

  6. 【莫比乌斯反演】关于Mobius反演与gcd的一些关系与问题简化(bzoj 2301 Problem b&&bzoj 2820 YY的GCD&&BZOJ 3529 数表)

    首先我们来看一道题  BZOJ 2301 Problem b Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd( ...

  7. 【BZOJ 2820】 YY的GCD (莫比乌斯+分块)

    YY的GCD   Description 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少 ...

  8. 【BZOJ2820】YY的GCD(莫比乌斯反演)

    [BZOJ2820]YY的GCD(莫比乌斯反演) 题面 讨厌权限题!!!提供洛谷题面 题解 单次询问\(O(n)\)是做过的一模一样的题目 但是现在很显然不行了, 于是继续推 \[ans=\sum_{ ...

  9. YY的GCD

    YY的GCD 给出T个询问,询问\(\sum_{i=1}^N\sum_{j=1}^M(gcd(i,j)\in prime)\),T = 10000,N, M <= 10000000. 解 显然质 ...

随机推荐

  1. 浅谈Fluent Ribbon 中的SplitButton

    Fluent Ribbon Control Suite 就不做介绍了,网上的例子比较多,类似Office2007及以后版本的图形界面(菜单栏).官网地址:https://github.com/flue ...

  2. javaSE、javaEE、javaME

    javaSE.javaEE.javaME区别: Java SE 是做电脑上运行的软件. Java EE 是用来做网站的-(我们常见的JSP技术) Java ME 是做手机软件的.

  3. 简单说明一下JS中的函数声明存在的“先使用,后定义”

    首先看一段JS代码,其中使用了两种方式声明了两个函数,分别在不同的地方调用两个函数: <script> 'use strict'; // 输出hello函数 console.log(hel ...

  4. 利用maven开发springMVC项目(二)——框架配置

    申明:主要内容来源于大神博客(使用IntelliJ IDEA开发SpringMVC网站(二)框架配置),我只是用eclipse自己练习使用,记录下来也只是为了学习使用,没有任何的商业用途,侵权必删. ...

  5. PAT——1042. 字符统计

    请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过1000的字符串.字符串由ASCII码表中任意可见字符及空格组成,至少包含1个英文字母,以回车结束( ...

  6. Luogu_2774 方格取数问题

    Luogu_2774 方格取数问题 二分图最小割 第一次做这种题,对于某些强烈暗示性的条件并没有理解到. 也就是每一立刻理解到是这个图是二分图. 为什么? 横纵坐标为奇数的只会和横纵坐标为偶数的相连. ...

  7. 离线服务器下docker的部署与应用

    一分钟内形成docker的模糊概念 网上很多文章避免将docker与虚拟机混为一谈,但对于初学者来说,完全可以将docker当做一种虚拟机技术,只需要牢牢记住一点最重要的区别:docker依赖于物理机 ...

  8. UGA,PGA

    tom认为UGA不包含 sort工作区,所以下面的图都是错误的 The UGA is, in effect, your session’s state. It is memory that your ...

  9. 树概念及使用connect by进行级联查询

    树 树,大家都见过,以这种形式的数据关系,就是树.下面看一张图,了解什么是根节点(树干).节点或分叉.叶(叶节点) connect by 级联查询 connect by可以用于级联查询,常用于对具有树 ...

  10. 1005. Spell It Right(20)—PAT 甲级

    Given a non-negative integer N, your task is to compute the sum of all the digits of N, and output e ...