2820: YY的GCD

Time Limit: 10 Sec  Memory Limit: 512 MB
Submit: 1705  Solved: 908
[Submit][Status][Discuss]

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

Source

分析:

我们很容易就可以得出一下这个复杂度爆炸的式子:

$\sum_ {prime(p)}^{n} \sum_ {d=1}^{n/p} μ(d) \left\lfloor \frac{n}{pd} \right\rfloor \left\lfloor \frac{m}{pd} \right\rfloor$

但是有10000个case,这个复杂度明显爆炸...我们设$k=pd$

可以得到一下式子:

$\sum_ {k=1}^{n} \left\lfloor \frac{n}{k} \right\rfloor \left\lfloor \frac{m}{k} \right\rfloor \sum_ {prime(p)  p\mid k} μ(\frac {k}{p})$

然后对于后面的μ我们可以预处理前缀和,这样单个case复杂度大概可以降到$sqrt(n)+sqrt(m)$...

代码:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
//by NeighThorn
#define int long long
using namespace std;const int maxn=10000000+5;int n,m,cas,cnt,f[maxn],mu[maxn],pri[maxn],vis[maxn];inline void prework(void){mu[1]=1;for(int i=2;i<=10000000;i++){if(!vis[i])pri[++cnt]=i,mu[i]=-1;for(int j=1;j<=cnt&&i*pri[j]<=10000000;j++){vis[i*pri[j]]=1;if(i%pri[j]==0){mu[i*pri[j]]=0;break;}mu[i*pri[j]]=-mu[i];}}for(int i=1;i<=cnt;i++)for(int j=1;pri[i]*j<=10000000;j++)f[pri[i]*j]+=mu[j];for(int i=1;i<=10000000;i++)f[i]+=f[i-1];
}signed main(void){scanf("%lld",&cas);prework();while(cas--){scanf("%lld%lld",&n,&m);if(n>m)swap(n,m);int ans=0,r;for(int i=1;i<=n;i=r+1){r=min(n/(n/i),m/(m/i));ans+=(f[r]-f[i-1])*(n/i)*(m/i);}printf("%lld\n",ans);}return 0;
}

  


By NeighThorn

转载于:https://www.cnblogs.com/neighthorn/p/6415260.html

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 - 莫比乌斯反演 - 线性筛

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

  4. [BZOJ]2820: YY的GCD

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

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

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

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

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

  7. [BZOJ 2820] YY的GCD

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

  8. 【BZOJ】2820: YY的GCD

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

  9. 【BZOJ 2820】 YY的GCD

    2820: YY的GCD Time Limit: 10 Sec   Memory Limit: 512 MB Submit: 807   Solved: 404 [ Submit][ Status] ...

最新文章

  1. 每日一皮:一直认为写代码的自己有点小帅
  2. 怎么配置php服务器时间,php如何设置服务器时间
  3. php生成图片验证码-附五种验证码
  4. HAproxy Json日志格式配置
  5. 【Java】从键盘中任意输入一个字符,判断该字符的类别
  6. JAVA线程并发数量控制_Java并发工具类(三):控制并发线程数的Semaphore
  7. 14-2 正则表达式
  8. 记事本如何运行python代码_利用Python开发实现简单的记事本
  9. python画图小猪佩奇_用Python代码画小猪佩奇 Python简直太神奇了
  10. 多小区下小区上行速率的计算(3)
  11. RTI_DDS自定义插件开发 2 NDDS传输插件API
  12. DSP存储器与寄存器管理
  13. 百度招聘的一个小彩蛋
  14. 闰年,闰月对应的天数快速记忆法
  15. 吴永祥:政府大数据服务平台建设之道
  16. mybatis 连表查询,子查询 collection,返回 vo
  17. 用HTML搭建3D立体相册网页,可放大缩小
  18. 搜狗拼音带来的俩个烦人的弹窗解决方法
  19. linux 进入recovery模式,recovery模式怎么进入,教您recovery模式怎么进入
  20. 初中级前端面试题(万字长文)

热门文章

  1. python定义类的程序_python扫码签到程序python中如何定义类
  2. mysql java.util.date_jdbc-java.sql.date和java.util.date之间转换
  3. [译]CSS3实现柱状图的3D立体动画效果
  4. Magento2后台忘记密码
  5. 使用根轨迹分析的动态补偿设计
  6. mysql-installer-community-5.5.29.0.msi 下载
  7. 从零搭建LNMP环境(三) - 安装MySQL数据库服务器
  8. 在.net中读写config文件的各种方法(转)
  9. Linux下文件的权限管理及网络连接
  10. Python多种方式实现”欢迎小红“