2820: YY的GCD

Time Limit: 10 Sec   Memory Limit: 512 MB
Submit: 807   Solved: 404
[ Submit][ Status]

Description

神犇YY虐完数论后给傻×kAc出了一题
给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对
kAc 这种傻×必然不会了,于是向你来请教 ……
多组输入

Input

第一行一个整数T 表述数据组数
接下来T行,每行两个正整数,表示N, M

Output

T 行,每行一个整数表示第i组数据的结果

Sample Input

2
10 10
100 100

Sample Output

30
2791

HINT

T = 10000

N, M <= 10000000

莫比乌斯函数。

iwtwiioi的题解非常详细orz

大概说一下做法,求gcd(x,y)=k的(x,y)的对数就是【BZOJ 1101】,那么这道题可以枚举k来求,但是会TLE,那么我们考虑公式的变形。(详见iwtwiioi的题解。。)

接下来的关键就是求g[x]函数:根据线性筛的原理,为了方便,把g[x]变成求g[kp]。

k是线性筛的时候当前要处理的数,p是枚举已经筛出来的质数(一定<k)。

就像求莫比乌斯函数一样,分三种情况:

1.k为质数,g[k]=1

2.k%p=0,说明p的指数>=2,然后根据g[x]函数的计算方法来计算此时的g[kp],分p'=p和p'!=p两种情况。

得出g[kp]=mu[k]

3.k%p!=0,说明p的指数=1,然后根据g[x]函数的计算方法来计算此时的g[kp],分p'=p和p'!=p两种情况。

得出g[kp]=-g[k]

于是在求莫比乌斯函数的同时就把g数组求好了,按照原来的分块方法计算即可~

#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define LL long long
#define M 10000005
using namespace std;
int check[M],mu[M],p[M],sum[M],g[M];
void Getmobius()
{mu[1]=1;int tot=0;for (int i=2;i<=M;i++){if (!check[i]){p[++tot]=i;mu[i]=-1;g[i]=1;}for (int j=1;j<=tot;j++){if (p[j]*i>M) break;check[p[j]*i]=1;if (i%p[j]==0){mu[p[j]*i]=0;g[p[j]*i]=mu[i];break;}mu[p[j]*i]=-mu[i];g[p[j]*i]=mu[i]-g[i];}}for (int i=1;i<=M;i++)sum[i]=sum[i-1]+g[i];
}
LL Calc(int a,int b)
{   LL ans=0LL;int pos;for (int d=1;d<=min(a,b);d=pos+1){pos=min(a/(a/d),b/(b/d));ans+=(LL)(sum[pos]-sum[d-1])*(a/d)*(b/d);}return ans;
}
int main()
{Getmobius();int T;scanf("%d",&T);while (T--){int n,m;scanf("%d%d",&n,&m);printf("%lld\n",Calc(n,m));}return 0;
}

感悟:

1.发现普通的计算方法TLE,对式子变形化简

2.求g数组套在线性筛中~

【BZOJ 2820】 YY的GCD相关推荐

  1. BZOJ 2820 YY的GCD 莫比乌斯反演

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

  2. bzoj 2820: YY的GCD(莫比乌斯反演)

    2820: YY的GCD Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 2111  Solved: 1137 [Submit][Status][Di ...

  3. BZOJ 2820: YY的GCD

    2820: YY的GCD Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 1705  Solved: 908 [Submit][Status][Dis ...

  4. bzoj 2820 YY的GCD - 莫比乌斯反演 - 线性筛

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

  5. [BZOJ]2820: YY的GCD

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

  6. BZOJ 2820 YY的GCD(莫比乌斯反演)

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

  7. BZOJ 2820 YY的GCD 莫比乌斯反演

    题意:链接 方法:莫比乌斯反演 解析: 这题跟上一篇博客有一点差别,当然我们能够考虑枚举素数这个大暴力.只是当你A掉这道题后发现正解?都将近5s时.就放弃了这个念头. 相同的式子我们能够直接搬过来.p ...

  8. [BZOJ 2820] YY的GCD

    题意 求下式的值: \[ \sum_{i=1}^n\sum_{j=1}^m \mathbb{P}(\gcd(i,j)) \] 其中 \(\mathbb{P}(x)\) 当 \(x\) 为质数时为 \( ...

  9. 【BZOJ】2820: YY的GCD

    [题意]给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对.T<=10^4,N,M<=10^7. [算法]数论(莫比乌 ...

最新文章

  1. icem密度盒怎么设置_seo中关键词密度的问题
  2. 基于Elasticsearch的数据报表方案
  3. python web自动化测试实验报告_Python:web自动化测试
  4. spring-boot 一款无侵入型,轻量级的接口文档生成工具apiggs
  5. 【Eclipse】Eclipse常用操作
  6. ibm v3700添加硬盘_机 · 科普帖丨从大到小又从小到大,硬盘这些年是怎么过来的...
  7. android去掉titlebar
  8. php自定义通讯协议,PHP自定义协议攻击 by L0st
  9. FileSystemObject操作文件的权限问题
  10. [设计模式]装饰者模式
  11. matlab练习程序(图像错切)
  12. LLVM与Clang的概述及关系
  13. 软件dfmea_fmea软件|失效模式与效应分析(fmea)下载 v03.01.13.0中文版 - 121下载站
  14. PCWorld:谷歌成下一个微软式企业10大理由
  15. .pptx 文件密码破解
  16. Ubuntu系统直接拷贝硬盘克隆
  17. VUE中数组赋值push与=的区别
  18. 2021互联网大厂职级对应薪资一览表
  19. 悟道 冥 与 力 万事皆可成
  20. Hello Lyq And Xj

热门文章

  1. 有或没有Apple Watch情况下远程控制iPhone相机
  2. Office365专业增强版安装步骤
  3. CocosCreator实现将资源文件部署到服务器的艰难摸索
  4. 揭秘华为数字化转型框架:1套方法、4类场景、3个平台能力
  5. 高通WLAN框架学习
  6. 计算机网络第七版(谢希仁教授著)第四章: 网络层课后习题部分详细答案
  7. 使用 Figma 完成产品设计工作流
  8. 三.系统编译-fastboot系统刷机nexus 6p
  9. 史上最会拍马屁的面试答卷——爆笑!
  10. 三个月找不到工作,我该怎么办?