这题跟2818一样的,只不过数据水一点,可以用多一个log的办法水过去……

原题意思是求以下式子:
$Ans=\sum\limits_{isprime(p)}\sum\limits_{i=1}^{a}\sum\limits_{i=1}^{b}[gcd(i,j)==p]$
首先把p拿下来,得到
$Ans=\sum\limits_{isprime(p)}\sum\limits_{i=1}^{a/p}\sum\limits_{i=1}^{b/p}[gcd(i,j)==1]$
然后就跟1101一样了,我就复制下。
然后考虑mobius函数的性质:
$\sum\limits_{d|n}\mu(d)=1(n==1),0(n>1)$
所以可以把那个gcd的式子替换下,得到:
$Ans=\sum\limits_{isprime(p)}\sum\limits_{i=1}^{a/p}\sum\limits_{i=1}^{b/p}\sum\limits_{d|gcd(i,j)}\mu(i)$
我们稍微改写一下这个式子:
$Ans=\sum\limits_{isprime(p)}\sum\limits_{d=1}^{min(a/p,b/p)}\mu(i)\frac{a}{pd}\frac{b}{pd}$
但是此时我们为了减少素数的枚举,可以把pd提取出来:
$\sum\limits_{pd=1}^{n}\sum\limits_{isprime(p),p|pd}\mu(d)\frac{a}{pd}\frac{b}{pd}$
由于这题数据比较水,根据调和级数枚举下质数就能多一个log水过去了……
然后就是下底函数分块。

//题目:bzoj2820 YY的GCD
#include<bits/stdc++.h>
#define N 10000005
#define ll long long
using namespace std;
int mu[N],vis[N],prime[N],cnt;
long long f[N];
void calcmu(){
cnt=;mu[]=;
memset(vis,true,sizeof(vis));
for(int i=;i<N;i++){
if(vis[i])prime[++cnt]=i,mu[i]=-;
for(int j=;j<=cnt;j++){
int t=prime[j]*i;
if(t>N)break;
vis[t]=false;
if(i%prime[j]==){mu[t]=;break;}
mu[t]-=mu[i];
}
}
for(int i=;i<=cnt;i++){
int p=prime[i];
for(int j=;j*p<=N;j++)f[j*p]+=mu[j];
}
for(int i=;i<=N;i++)f[i]+=f[i-];
}
int read(){
int f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return x*f;
}
int main(){
calcmu();int j;int n,m;
int T=read();
while(T--){
ll ans=;n=read();m=read();
if(n>m)swap(n,m);
for(int i=;i<=n;i=j+){
j=min(n/(n/i),m/(m/i));
ans+=(f[j]-f[i-])*(n/i)*(m/i);
}
printf("%lld\n",ans);
}
return ;
}

【反演复习计划】【bzoj2820】YY的GCD的更多相关文章

  1. BZOJ2820 YY的GCD 【莫比乌斯反演】

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

  2. [BZOJ2820]YY的GCD

    [BZOJ2820]YY的GCD 试题描述 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少 ...

  3. BZOJ2820 YY的GCD 莫比乌斯+系数前缀和

    /** 题目:BZOJ2820 YY的GCD 链接:http://www.cogs.pro/cogs/problem/problem.php?pid=2165 题意:神犇YY虐完数论后给傻×kAc出了 ...

  4. BZOJ2820:YY的GCD(莫比乌斯反演)

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

  5. Bzoj-2820 YY的GCD Mobius反演,分块

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2820 题意:多次询问,求1<=x<=N, 1<=y<=M且gcd( ...

  6. 【莫比乌斯反演】BZOJ2820 YY的GCD

    Description 求有多少对(x,y)的gcd为素数,x<=n,y<=m.n,m<=1e7,T<=1e4. Solution 因为题目要求gcd为素数的,那么我们就只考虑 ...

  7. BZOJ2820: YY的GCD(反演)

    题解 题意 题目链接 Sol 反演套路题.. 不多说了,就是先枚举一个质数,再枚举一个约数然后反演一下. 最后可以化成这样子 \[\sum_{i = 1}^n \frac{n}{k} \frac{n} ...

  8. 【反演复习计划】【51nod1594】Gcd and Phi

    现在感觉反演好多都是套路QAQ…… #include<bits/stdc++.h> using namespace std; ; typedef long long ll; int n,c ...

  9. 【反演复习计划】【bzoj2818】gcd

    就是之前的2820的升级版. 把暴力枚举素数改成预处理就随便A了. #include<bits/stdc++.h> #define N 10000005 #define ll long l ...

随机推荐

  1. DFS——hdu1016Prime Ring Problem

    一.题目回顾 题目链接:Prime Ring Problem Problem Description A ring is compose of n circles as shown in diagra ...

  2. 编程练习:寻找发帖"水王"

    题目: 寻找发帖"水王" 来源: 编程之美 分析 衍生:就是给定一个数组,其中某个元素出现次数超过了数组长度的一半,找出这个元素 方法s 方法1 对这个串进行遍历,同时对出现的元素 ...

  3. 解决hadoop no dataNode to stop问题

    错误原因: datanode的clusterID 和 namenode的 clusterID 不匹配. 解决办法: 1. 打开 hadoop/tmp/dfs/namenode/name/dir 配置对 ...

  4. 玩lua

    https://my.oschina.net/wangxuanyihaha/blog/186401

  5. Android中有哪些好的开发框架?

    在安卓开发中,框架的使用必不可少,合理利用一些好的开发框架,往往可以达到事半功倍的效果.本文小编就将和大家分享安卓开发者不得不知的5款框架,一起来看看吧,新技能get走起~~ 1.thinkAndro ...

  6. C#重载和重写

    Overload:重载就是在同一个类中,方法名相同,参数列表不同.参数列表不同包括:参数的个数不同,参数类型不同. using System; using System.Collections.Gen ...

  7. 【题解】SDOI2009学校食堂

    不知道有没有人跟我有一样的感觉……实际上很多的状压DP都不难,然而调到心碎……这题题面看起来很长,还有混合的‘位运算’来吓唬人(实际上就是异或而已).但实际上只要仔细阅读,发现也是一道水水的裸题. 首 ...

  8. JQuery用鼠标选文字来发新浪微博

    最近注意到新浪博客有个小功能,就是当鼠标选中一段文字时会浮现一个小图片,点击这个图片可以把选中内容发送到新浪微博,一时兴起昨晚就写了一个Demo玩了一下,代码超简单,没优化,有兴趣的朋友可以自己改进. ...

  9. gogole调试请求体的数据怎么知道

    在network---->header->request payload中看 详细情况见下图所示:

  10. json获取属性值的方式

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript(Standard ECMA-262 ...