https://www.luogu.org/problemnew/show/P2257

求 \(n,m\) 中 \(gcd(i,j)==p\) 的数对的个数

求 $\sum\limits_p \sum\limits_{i=1}{n}\sum\limits_{j=1}{m}[gcd(i,j)==p] $

由套路:

\(=\sum\limits_p \sum\limits_{k=1}^{N}\mu(k) \lfloor\frac{n}{kp}\rfloor \lfloor\frac{m}{kp}\rfloor\)

再套路:

\(=\sum\limits_p \sum\limits_{T=kp}^{N}\mu(\frac{T}{p}) \lfloor\frac{n}{T}\rfloor \lfloor\frac{m}{T}\rfloor\)

交换求和:

\(=\sum\limits_{T=1}^{N} \sum\limits_{p|T} \mu(\frac{T}{p}) \lfloor\frac{n}{T}\rfloor \lfloor\frac{m}{T}\rfloor\)

提T:

\(=\sum\limits_{T=1}^{N} \lfloor\frac{n}{T}\rfloor \lfloor\frac{m}{T}\rfloor \sum\limits_{p|T} \mu(\frac{T}{p})\)

后面的式子可以预处理,方法是在筛出质数表和莫比乌斯函数表之后,枚举每个质数p,再枚举倍数k,给kp加上 \(\mu(k)\) .

前面的式子可以整除分块 \(r=min(n/(n/l),m/(m/l))\) .

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define MAXN 10000000+5
  5. /* 莫比乌斯函数筛 begin */
  6. int mu[MAXN];
  7. int pri[MAXN],pritop;
  8. bool notpri[MAXN];
  9. //pritop从1开始计数
  10. int sumdmu[MAXN],prefixsumdmu[MAXN];
  11. void sieve3(int n) {
  12. notpri[1]=mu[1]=1;
  13. for(int i=2; i<=n; i++) {
  14. if(!notpri[i])
  15. pri[++pritop]=i,mu[i]=-1;
  16. for(int j=1; j<=pritop&&i*pri[j]<=n; j++) {
  17. notpri[i*pri[j]]=1;
  18. //略有不同
  19. if(i%pri[j])
  20. mu[i*pri[j]]=-mu[i];
  21. else {
  22. mu[i*pri[j]]=0;
  23. break;
  24. }
  25. }
  26. }
  27. for(int j=1; j<=pritop; j++) {
  28. for(int i=1;i*pri[j]<=n;i++){
  29. sumdmu[i*pri[j]]+=mu[i];
  30. }
  31. }
  32. for(int i=1;i<=n;i++)
  33. prefixsumdmu[i]=prefixsumdmu[i-1]+sumdmu[i];
  34. }
  35. /* 莫比乌斯函数筛 end */
  36. //整除分块,n,m版
  37. ll aliquot_patition(int n,int m) {
  38. ll ans=0;
  39. int N=min(n,m);
  40. for(int l=1,r; l<=N; l=r+1) {
  41. r=min(n/(n/l),m/(m/l));
  42. ans+=1ll*(n/l)*(m/l)*(prefixsumdmu[r]-prefixsumdmu[l-1]);
  43. }
  44. return ans;
  45. }
  46. int main() {
  47. sieve3(10000000);
  48. int T;
  49. scanf("%d",&T);
  50. while(T--){
  51. int n,m;
  52. scanf("%d%d",&n,&m);
  53. printf("%lld\n",aliquot_patition(n,m));
  54. }
  55. }

洛谷 - P2257 - YY的GCD - 莫比乌斯反演 - 整除分块的更多相关文章

  1. 洛谷P2257 YY的GCD 莫比乌斯反演

    原题链接 差不多算自己推出来的第一道题QwQ 题目大意 \(T\)组询问,每次问你\(1\leqslant x\leqslant N\),\(1\leqslant y\leqslant M\)中有多少 ...

  2. 洛谷 P2257 YY的GCD

    洛谷 P2257 YY的GCD \(solution:\) 这道题完全跟[POI2007]ZAP-Queries (莫比乌斯反演+整除分块) 用的一个套路. 我们可以列出答案就是要我们求: \(ans ...

  3. [BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块)

    [BZOJ 2820] YY的gcd(莫比乌斯反演+数论分块) 题面 给定N, M,求\(1\leq x\leq N, 1\leq y\leq M\)且gcd(x, y)为质数的(x, y)有多少对. ...

  4. 洛谷 P2257 - YY的GCD(莫比乌斯反演+整除分块)

    题面传送门 题意: 求满足 \(1 \leq x \leq n\),\(1 \leq y \leq m\),\(\gcd(x,y)\) 为质数的数对 \((x,y)\) 的个数. \(T\) 组询问. ...

  5. 洛谷P2257 YY的GCD(莫比乌斯反演)

    传送门 原来……莫比乌斯反演是这么用的啊……(虽然仍然不是很明白) 首先,题目所求如下$$\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=prim]$$ 我们设$f(d)$表示$g ...

  6. 洛谷 P2257 YY的GCD 题解

    原题链接 庆祝: 数论紫题 \(T4\) 达成! 莫比乌斯 \(T1\) 达成! yy 真是个 神犇 前记 之前我觉得: 推式子,直接欧拉筛,筛出个 \(\phi\),然后乱推 \(\gcd\) 就行 ...

  7. 洛谷P2257 YY的GCD

    今日份是数论 大概是..从小学奥数到渐渐毒瘤 那就简单列一下目录[大雾 同余 质数密度 唯一分解定理 互质 完全剩余系 简化剩余系 欧拉函数 逆元 斐蜀定理 阶(及其性质) 欧拉定理 费马小定理 原根 ...

  8. Luogu P2257 YY的GCD 莫比乌斯反演

    第一道莫比乌斯反演...$qwq$ 设$f(d)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==d]$ $F(n)=\sum_{n|d}f(d)=\lfloor \frac{N ...

  9. Bzoj 2820: YY的GCD(莫比乌斯反演+除法分块)

    2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MB Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x& ...

随机推荐

  1. 系统函数C字符串的实现(11):strchr

    字符查找函数strchr char *mystrchr(const char *str, const char c) { char *p = NULL; for (char*newp = str; * ...

  2. LeetCode:判断最长前缀

    之前一直忽略了一个问题就是:给定的空字符串数组 char* longestCommonPrefix(char** strs, int strsSize) { char* result; if(strs ...

  3. nginx 安装和配置文件说明

    1. 安装依赖包 yum install gcc gcc+ yum install -y pcre pcre-devel openssl openssl-devel zlib zlib-devel 2 ...

  4. EasyDarwin开源流媒体云平台中boost Base64编解码后与源长度不匹配的bug

    本文转自EasyDarwin团队Alex的博客:http://blog.csdn.net/cai6811376 EasyDarwin云平台中部分协议使用了Base64编码昨晚报文通信的载体.比如在对摄 ...

  5. ReentrantLock和Synchronized

    1 synchronized 1.1 一旦没有获取到就只能一直等待 A和B都获取同一个对象锁,如果A获取了,B没有获取到,那么在A释放该锁之前,B只能无穷等待下去. 1.2 synchronized是 ...

  6. ora-12170 与 Oracle lsnrctl

    在startup 启动数据库后,使用plsql去连接数据库时, 出现ora-12170 错误:   在启动.关闭或者重启oracle监听器之前确保使用lsnrctl status命令检查oracle监 ...

  7. 在Win7创建WiFi热点

    1.在开始菜单搜索cmd 2.运行cmd 3.输入以下命令,注意:Your-WiFi-Name和Your-WiFi-Password分别为WiFi名称和密码 netsh wlan set hosted ...

  8. AndroidPageObjectTest_ByAllPossible.java

    以下代码使用ApiDemos-debug.apk进行测试 //这个脚本用于演示PageFactory的功能:使用注解@AndroidFindAll定位元素.注解用法参考页面类代码. package c ...

  9. Android 如何永久性开启adb 的root权限【转】

    本文转载自:https://www.2cto.com/kf/201702/593999.html adb 的root 权限是在system/core/adb/adb.c 中控制.主要根据ro.secu ...

  10. (转)Java经典设计模式(2):七大结构型模式(附实例和详解)

    原文出处: 小宝鸽 总体来说设计模式分为三大类:创建型模式.结构型模式和行为型模式. 博主的上一篇文章已经提到过创建型模式,此外该文章还有设计模式概况和设计模式的六大原则.设计模式的六大原则是设计模式 ...