题目大意:给你$n(1\leqslant n\leqslant 10^7)$,求$\displaystyle\sum\limits_{x=1}^n\displaystyle\sum\limits_{y=1}^n[(x,y)\in \rm prime]$($(a,b)$为$a,b$的$gcd$)

题解:可以用莫比乌斯反演来做,同这道题,只需要把$m$改成$n$就行了

卡点:

C++ Code:(莫比乌斯反演)

  1. #include <cstdio>
  2. #include <cstring>
  3. #define maxn 10000010
  4. using namespace std;
  5. int n;
  6. int miu[maxn], plist[maxn], ptot;
  7. int g[maxn];
  8. bool isp[maxn];
  9. void sieve(int n) {
  10. memset(isp, true, sizeof isp);
  11. miu[1] = 1;
  12. for (int i = 2; i < n; i++) {
  13. if (isp[i]) plist[ptot++] = i, miu[i] = -1;
  14. for (int j = 0; j < ptot && i * plist[j] < n; j++) {
  15. int tmp = i * plist[j];
  16. isp[tmp] = false;
  17. if (i % plist[j] == 0) {
  18. miu[tmp] = 0;
  19. break;
  20. }
  21. miu[tmp] = -miu[i];
  22. }
  23. }
  24. for (int i = 0; i < ptot; i++) {
  25. for (int j = 1; j * plist[i] < n; j++)
  26. g[j * plist[i]] += miu[j];
  27. }
  28. for (int i = 2; i <= n; i++) g[i] += g[i - 1];
  29. }
  30. inline int min(int a, int b) {return a < b ? a : b;}
  31. long long solve(int n, int m) {
  32. long long ans = 0;
  33. int i, j;
  34. int tmp = min(n, m);
  35. for (i = 1; i <= tmp; i = j + 1) {
  36. j = min(n / (n / i), m / (m / i));
  37. ans += 1ll * (n / i) * (m / i) * (g[j] - g[i - 1]);
  38. }
  39. return ans;
  40. }
  41. int main() {
  42. sieve(maxn);
  43. scanf("%d", &n);
  44. printf("%lld\n", solve(n, n));
  45. return 0;
  46. }

题解:也可以用也可以用$\phi$函数来做。
$$
若(x,y)==p(p\in \rm prime)
\Rightarrow \big(\dfrac{x}{p},\dfrac{y}{p}\big)==1
$$
线性筛出每个数的$\varphi$,再前缀和一下就行了

注意,若$x<y$$(x,y)==p$和$(y,x)==p$是两种不同的方案,但只会在算$y$时被加上,所以答案要乘二,但是当$x==y$时答案会多算一遍,所以要减去质数的个数

卡点:算$\varphi$时没开$long\;long$

C++ Code:(phi函数)

  1. #include <cstdio>
  2. #include <cstring>
  3. #define maxn 10000010
  4. using namespace std;
  5. int n;
  6. bool isp[maxn];
  7. int plist[maxn], ptot;
  8. long long phi[maxn], ans;
  9. void sieve(int n) {
  10. memset(isp, true, sizeof isp);
  11. phi[1] = 1;
  12. for (int i = 2; i <= n; i++) {
  13. if (isp[i]) {
  14. plist[ptot++] = i;
  15. phi[i] = i - 1;
  16. }
  17. for (int j = 0; j < ptot && i * plist[j] <= n; j++) {
  18. int tmp = i * plist[j];
  19. isp[tmp] = false;
  20. if (i % plist[j] == 0) {
  21. phi[tmp] = phi[i] * plist[j];
  22. break;
  23. }
  24. phi[tmp] = phi[i] * phi[plist[j]];
  25. }
  26. }
  27. }
  28. int main() {
  29. scanf("%d", &n);
  30. sieve(n);
  31. for (int i = 2; i <= n; i++) phi[i] += phi[i - 1];
  32. for (int i = 0; i < ptot; i++) ans += phi[n / plist[i]] << 1;
  33. printf("%lld\n", ans - ptot);
  34. return 0;
  35. }

[洛谷P2568]GCD的更多相关文章

  1. 洛谷P2568 GCD (欧拉函数/莫比乌斯反演)

    P2568 GCD 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 输入 ...

  2. 洛谷P2568 GCD(线性筛法)

    题目链接:传送门 题目: 题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 ...

  3. 洛谷 P2568 GCD

    https://www.luogu.org/problemnew/show/P2568#sub 最喜欢题面简洁的题目了. 本题为求两个数的gcd是素数,那么我们将x和y拆一下, 假设p为$gcd(x, ...

  4. 洛谷 - P2568 - GCD - 欧拉函数

    https://www.luogu.org/problemnew/show/P2568 统计n以内gcd为质数的数的个数. 求 \(\sum\limits_p \sum\limits_{i=1}^{n ...

  5. 洛谷 P2568 GCD(莫比乌斯反演)

    题意:$\sum_{i=1}^{n}\sum_{j=1}^{n}[gcd(i,j)\epsilon prime]$. 对于这类题一般就是枚举gcd,可得: =$\sum_{d\epsilon prim ...

  6. 洛谷 P2568 GCD 题解

    原题链接 庆祝一下:数论紫题达成成就! 第一道数论紫题.写个题解庆祝一下吧. 简要题意:求 \[\sum_{i=1}^n \sum_{j=1}^n [gcd(i,j)==p] \] 其中 \(p\) ...

  7. 洛谷P2568 GCD(莫比乌斯反演)

    传送门 这题和p2257一样……不过是n和m相同而已…… 所以虽然正解是欧拉函数然而直接改改就行了所以懒得再码一遍了2333 不过这题卡空间,记得mu开short,vis开bool //minamot ...

  8. 洛谷P2398 GCD SUM (数学)

    洛谷P2398 GCD SUM 题目描述 for i=1 to n for j=1 to n sum+=gcd(i,j) 给出n求sum. gcd(x,y)表示x,y的最大公约数. 输入输出格式 输入 ...

  9. 洛谷 P1890 gcd区间

    P1890 gcd区间 题目提供者 洛谷OnlineJudge 标签 数论(数学相关) 难度 普及/提高- 题目描述 给定一行n个正整数a[1]..a[n]. m次询问,每次询问给定一个区间[L,R] ...

随机推荐

  1. 浅谈css蒙版效果

    我们进网站浏览时经常看到当鼠标悬浮在图片上或者某一个地方时,会出现一层朦胧现象覆盖着悬浮位置,简单的理解为“蒙版效果”.下面简单列举实现过程: HTML: CSS:

  2. ThinkPHP创建应用

    新建一个文件 引入ThinkPHP文件

  3. Mysql基础3-数据操作语言DML-数据查询语言DQL

    主要: 数据操作语言DML 数据查询语言DQL 数据操作语言DML DML: Data Mutipulation Language 插入数据(增) 一般插入数据形式 1)形式1: insert [in ...

  4. Could not obtain transaction-synchronized Session for current thread 错误的解决方法!

    BsTable bsTable = new BsTable(); // String time = request.getParameter("date"); String tim ...

  5. python3爬虫之开篇

    写在前面的话: 折腾爬虫也有一段时间了,从一开始的懵懵懂懂,到现在的有一定基础,对于这一路的跌跌撞撞,个人觉得应该留下一些文字性的东西,毕竟好记性不如烂笔头,而且毕竟这是吃饭的家伙,必须用心对待才可以 ...

  6. 计蒜客-----跳跃游戏(C语言)

    /********************************************************给定一个非负整数数组,假定你的初始位置为数组第一个下标.数组中的每个元素代表你在那个位 ...

  7. rhel6.4扩充swap分区

    状况:Red hat 6.4 swap分区不足 解决:扩充swap ================================================================== ...

  8. 单调队列优化dp

    洛谷p3800(单调队列优化DP) 题目背景 据说在红雾异变时,博丽灵梦单身前往红魔馆,用十分强硬的手段将事件解决了. 然而当时灵梦在Power达到MAX之前,不具有“上线收点”的能力,所以她想要知道 ...

  9. 【python3.X】python学习中排雷过程^_^

    问题一:python读取文件时报错:“UnicodeDecodeError: 'gbk' codec can't decode byte 0x8d in position 52: illegal mu ...

  10. 从一个线上服务器警告谈谈backlog

    缘起 双十一如期而至,此时的我因为在处理客户的一个问题已经陷入了忙碌.突然,不断接到驻场实施发来的反馈,都是相同的反馈--"客户端操作缓慢". 我现在负责的服务器是一台接口服务器, ...