【反演复习计划】【bzoj2820】YY的GCD
这题跟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的更多相关文章
- BZOJ2820 YY的GCD 【莫比乌斯反演】
BZOJ2820 YY的GCD Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, ...
- [BZOJ2820]YY的GCD
[BZOJ2820]YY的GCD 试题描述 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少 ...
- BZOJ2820 YY的GCD 莫比乌斯+系数前缀和
/** 题目:BZOJ2820 YY的GCD 链接:http://www.cogs.pro/cogs/problem/problem.php?pid=2165 题意:神犇YY虐完数论后给傻×kAc出了 ...
- BZOJ2820:YY的GCD(莫比乌斯反演)
Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必 ...
- Bzoj-2820 YY的GCD Mobius反演,分块
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2820 题意:多次询问,求1<=x<=N, 1<=y<=M且gcd( ...
- 【莫比乌斯反演】BZOJ2820 YY的GCD
Description 求有多少对(x,y)的gcd为素数,x<=n,y<=m.n,m<=1e7,T<=1e4. Solution 因为题目要求gcd为素数的,那么我们就只考虑 ...
- BZOJ2820: YY的GCD(反演)
题解 题意 题目链接 Sol 反演套路题.. 不多说了,就是先枚举一个质数,再枚举一个约数然后反演一下. 最后可以化成这样子 \[\sum_{i = 1}^n \frac{n}{k} \frac{n} ...
- 【反演复习计划】【51nod1594】Gcd and Phi
现在感觉反演好多都是套路QAQ…… #include<bits/stdc++.h> using namespace std; ; typedef long long ll; int n,c ...
- 【反演复习计划】【bzoj2818】gcd
就是之前的2820的升级版. 把暴力枚举素数改成预处理就随便A了. #include<bits/stdc++.h> #define N 10000005 #define ll long l ...
随机推荐
- DFS——hdu1016Prime Ring Problem
一.题目回顾 题目链接:Prime Ring Problem Problem Description A ring is compose of n circles as shown in diagra ...
- 编程练习:寻找发帖"水王"
题目: 寻找发帖"水王" 来源: 编程之美 分析 衍生:就是给定一个数组,其中某个元素出现次数超过了数组长度的一半,找出这个元素 方法s 方法1 对这个串进行遍历,同时对出现的元素 ...
- 解决hadoop no dataNode to stop问题
错误原因: datanode的clusterID 和 namenode的 clusterID 不匹配. 解决办法: 1. 打开 hadoop/tmp/dfs/namenode/name/dir 配置对 ...
- 玩lua
https://my.oschina.net/wangxuanyihaha/blog/186401
- Android中有哪些好的开发框架?
在安卓开发中,框架的使用必不可少,合理利用一些好的开发框架,往往可以达到事半功倍的效果.本文小编就将和大家分享安卓开发者不得不知的5款框架,一起来看看吧,新技能get走起~~ 1.thinkAndro ...
- C#重载和重写
Overload:重载就是在同一个类中,方法名相同,参数列表不同.参数列表不同包括:参数的个数不同,参数类型不同. using System; using System.Collections.Gen ...
- 【题解】SDOI2009学校食堂
不知道有没有人跟我有一样的感觉……实际上很多的状压DP都不难,然而调到心碎……这题题面看起来很长,还有混合的‘位运算’来吓唬人(实际上就是异或而已).但实际上只要仔细阅读,发现也是一道水水的裸题. 首 ...
- JQuery用鼠标选文字来发新浪微博
最近注意到新浪博客有个小功能,就是当鼠标选中一段文字时会浮现一个小图片,点击这个图片可以把选中内容发送到新浪微博,一时兴起昨晚就写了一个Demo玩了一下,代码超简单,没优化,有兴趣的朋友可以自己改进. ...
- gogole调试请求体的数据怎么知道
在network---->header->request payload中看 详细情况见下图所示:
- json获取属性值的方式
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript(Standard ECMA-262 ...