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

【分析】

  

  当Prime确定时,跟bzoj1101一样,得 :
  ...=∑u[d]*(n/(Pri*d))*(m/(pri*d))     但是暴力枚举Pri应该很慢吧~~多组诶~~

  然后通过前面几题我们知道u这里是可以快速求和的,而我们尽量让(n/(Pri*d))*(m/(pri*d) 这个部分是确定的,那么搞完u之后就可以直接√n分块了。

  所以不妨设k=pri*d,把k变成我们要枚举的东西,原式= ∑u[k/Pri]*(n/k)*(m/k)  。

  问题就变成求u[k/Pri],它的意义是什么呢?相当于     - >

这个东西~~

  这个东西表示蒟蒻的脑子是想不出来怎么求的~~

  直接放大神的解析:~~

  

  好像很有道理哦!!!!!

  除了熟悉的积性函数,其他的我都不会线性筛了~~真是太年轻!!!

  然后可爱的分块就可以了。

代码如下:

 #include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
#define Maxn 10000010
#define LL long long LL mu[Maxn],pri[Maxn],h[Maxn],g[Maxn],pl;
bool q[Maxn]; LL mymin(LL x,LL y) {return x<y?x:y;} void get_mu(LL mx)
{
pl=;
memset(q,,sizeof(q));
mu[]=;g[]=;
for(LL i=;i<=mx;i++)
{
if(q[i])
{
pri[++pl]=i;
mu[i]=-;g[i]=;
}
for(LL j=;j<=pl;j++)
{
if(i*pri[j]>mx) break;
q[i*pri[j]]=;
if(i%pri[j]==) mu[i*pri[j]]=,g[i*pri[j]]=mu[i];
else mu[i*pri[j]]=-mu[i],g[i*pri[j]]=mu[i]-g[i];
if(i%pri[j]==) break;
}
}
h[]=g[];
for(int i=;i<=mx;i++) h[i]=h[i-]+g[i];
} int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
get_mu();
int T;
scanf("%d",&T);
while(T--)
{
LL n,m,t;
scanf("%lld%lld",&n,&m);
if(n>m) t=n,n=m,m=t; LL ans=; LL sq=(LL)ceil(sqrt((double)m));
for(LL i=;i<=mymin(sq,n);i++)
{
ans+=g[i]*(n/i)*(m/i);
} for(LL i=sq+;i<=n;)
{
LL x=n/i,y=m/i;
LL r1=n/x+,r2=m/y+;
LL r=mymin(r1,r2);
if(r>m+) r=m+;
ans+=(h[r-]-h[i-])*x*y;
i=r;
} printf("%lld\n",ans); }
return ;
}

[BZOJ2820]

2016-08-30 11:45:40

【BZOJ 2820】 YY的GCD (莫比乌斯+分块)的更多相关文章

  1. [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)有多少对. ...

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

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

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

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

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

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

  6. BZOJ 2820: YY的GCD 莫比乌斯反演_数学推导_线性筛

    Code: #include <cstdio> #include <algorithm> #include <cstring> #include <vecto ...

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

    我们可以枚举每一个质数,那么答案就是 $\sum_{p}\sum_{d<=n}\mu(d)*\lfloor n / pd \rfloor *\lfloor m / pd \rfloor$ 直接做 ...

  8. 【莫比乌斯反演】关于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( ...

  9. 【刷题】BZOJ 2820 YY的GCD

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

  10. SPOJ PGCD 4491. Primes in GCD Table && BZOJ 2820 YY的GCD (莫比乌斯反演)

    4491. Primes in GCD Table Problem code: PGCD Johnny has created a table which encodes the results of ...

随机推荐

  1. Linux下crontab命令详解

    crontab -e编辑定时任务 * * * shell.sh 从左到右依次是:分钟.小时.天.周.月

  2. Magento网站如何添加一个可配置产品

    有的产品,比如服装,同一件衣服有S.M.L.XL.XXL等尺码供客户选择,或者有多种颜色可以供客户选择,Magento中管这种有选项供客户选择的产品叫做可配置产品 (Configurable Prod ...

  3. 史上最全的JavaScript工作笔记

    /* * JavaScript查看对象函数 */ function resultTest( obj ){ var resultTest = ''; $.each(obj,function(key,va ...

  4. LIBPNG使用小结(二)

    之前写的LIBPNG库学习小结介绍了怎么样自定义LIBPNG库的write.read.flush函数,而不使用LIBPNG库提供的默认函数. 上一篇讲述的都是在单线程的情况下,今天将程序升级,放在多线 ...

  5. rc4加密

    function RC4(Expression, Password: string): string; var RB : array[0..255] of Integer; X, Y, Z: long ...

  6. (三)映射对象标识符(OID)

    所有项目导入对应的hibernate的jar包.mysql的jar包和添加每次都需要用到的HibernateUtil.java 第一节:Hibernate 用对象标识符(OID)来区分对象 例子: h ...

  7. 一个简单的定时器(NSTimer)的封装

    在项目开发中我们有的时候需要用到计时器,比如登录超时,scrollview的滚动等,那么就让我们自己手动的去创建一个类库吧. 1 首先你需要一个向外提供创建的便捷方法. 1.1 这里考虑两种情况,一种 ...

  8. Sublime Text使用手记

    1.Package Control 输入python 命令安装,打开控制台输入下方代码运行即可.控制台打开可使用快捷键Ctrl+~ 或菜单栏中View> Show Console,可访问Pack ...

  9. java web 文件上传下载

    文件上传下载案例: 首先是此案例工程的目录结构:

  10. 第3章 Struts2框架--2、完整的Struts2框架应用实例

    1.建立一个Dynamic Web project,项目名:UserManager,把Struts2所必需的JAR复制到项目WEB-INF/lib目录下 2.修改web.xml文件,在web.xml文 ...