●BZOJ 2820 YY的GCD
题链:
http://www.lydsy.com/JudgeOnline/problem.php?id=2820
题解:
莫比乌斯反演
先看看这个题:HDU 1695 GCD(本题简化版)
HDU 1695 GCD:求满足x∈(1~n)和y∈(1~m),且gcd(x,y)=k的(x,y)的对数。
而这个k是给定的。
可以由莫比乌斯反演得到:(详见●HDU 1695 GCD)
$ANS=\sum_{d=1}^{n}\mu(d)\times\lfloor\frac{n}{d}\rfloor\times\lfloor\frac{m}{d}\rfloor$
但是本题的k是所有的质数,额...
我们可以先枚举一个质数p,然后仿照上面的做法,可以得到:
$ANS=\sum_p \sum_{d=1}^{n}\mu(d)\times\lfloor\frac{n/p}{d}\rfloor\times\lfloor\frac{m/p}{d}\rfloor$
这个复杂度还无法满足本题的数据。
然后把上面的求和式做如下化简:
令$T=pd$,
那么:$ANS=\sum_{T=1}^{n}{(}{\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor} \sum_{p|T}\mu(\frac{T}{p}){)}$
如果可以预处理出$\sum_{p|T}\mu(\frac{T}{p})$的值,
那么上式就可以$O(n)$求出,
如果运用向下取整的特性进行分块计算,就可以达到$O(\sqrt{n})$的复杂度。
至于$\sum_{p|T}\mu(\frac{T}{p})$,有两种求法:
设$sum[T]=\sum_{p|T}\mu(\frac{T}{p})$
1.枚举每个质数p,然后把他的倍数$T=\lambda p的sum[T]+=\mu(\frac{T}{p})$
2.运用$\mu$是积性函数的性质,可以在线型筛时求出。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#define MAXN 10000050
using namespace std;
long long ANS;
int musum[MAXN],mu[MAXN];
void Prime_Sieve(){
static bool np[MAXN],dp[MAXN]; mu[1]=1;
static int prime[MAXN],pnt;
for(int i=2;i<=10000000;i++){
if(!np[i]) prime[++pnt]=i,dp[i]=1,mu[i]=-1,musum[i]=1;
for(int j=1;j<=pnt&&i<=10000000/prime[j];j++){
np[i*prime[j]]=1; dp[i*prime[j]]=dp[i]&&i%prime[j];
mu[i*prime[j]]=i%prime[j]?-mu[i]:0;
if(i%prime[j]==0) musum[i*prime[j]]=dp[i]?mu[i]:0;
else musum[i*prime[j]]=musum[i]*mu[prime[j]]+mu[i];
if(i%prime[j]==0) break;
}
}
for(int i=1;i<=10000000;i++) musum[i]+=musum[i-1];
}
int main(){
int n,m,Case,mini;
Prime_Sieve(); scanf("%d",&Case);
//while(scanf("%d",&n)) printf("%d\n",musum[n]);
while(Case--){
scanf("%d%d",&n,&m); mini=min(n,m); ANS=0;
for(int i=1,last;i<=mini;i=last+1){
last=min(n/(n/i),m/(m/i));
ANS+=1ll*(musum[last]-musum[i-1])*(n/i)*(m/i);
}
printf("%lld\n",ANS);
}
return 0;
}
●BZOJ 2820 YY的GCD的更多相关文章
- 【莫比乌斯反演】关于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( ...
- [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)有多少对. ...
- BZOJ 2820: YY的GCD [莫比乌斯反演]【学习笔记】
2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1624 Solved: 853[Submit][Status][Discu ...
- 【刷题】BZOJ 2820 YY的GCD
Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种傻×必然 ...
- Bzoj 2820: YY的GCD(莫比乌斯反演+除法分块)
2820: YY的GCD Time Limit: 10 Sec Memory Limit: 512 MB Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x& ...
- bzoj 2820 YY的GCD 莫比乌斯反演
题目大意: 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 这里就抄一下别人的推断过程了 后面这个g(x) 算的方法就是在线性 ...
- bzoj 2820 YY的GCD - 莫比乌斯反演 - 线性筛
Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必 ...
- BZOJ 2820 YY的GCD(莫比乌斯函数)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2820 题意:给定n,m.求1<=x<=n, 1<=y<=m且Gc ...
- bzoj 2820 YY的GCD(莫比乌斯反演)
Description 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 kAc这种傻× ...
随机推荐
- 20155214&20155216 实验一 开发化境的熟悉
20155214&20155216 实验一 开发化境的熟悉 实验内容: 实验一 开发化境的熟悉-1-交叉编译环境-(使用实验室台式机) 1.建立实验目录"mkdir linux_组员 ...
- Python 实现队列
操作 Queue() 创建一个空的队列 enqueue(item) 往队列中添加一个item元素 dequeue() 从队列头部删除一个元素 is_empty() 判断一个队列是否为空 size() ...
- 一个轻量级iOS安全框架:SSKeyChain
摘要 SSKeyChains对苹果安全框架API进行了简单封装,支持对存储在钥匙串中密码.账户进行访问,包括读取.删除和设置.SSKeyChain的作者是大名鼎鼎的SSToolkit的作者samsof ...
- 小草手把手教你LabVIEW串口仪器控制—安装使用仪器现有驱动
声明:很多仪器是没有驱动的.所以,具体问题具体分析.另外声明:所谓的驱动,也就是封装好的底层的串口通信程序,也是程序而已,只不过别人帮你做成了子 VI,让自己容易用.所以:不要弄混淆了概念.国外的很多 ...
- Telnet、SSH和VNC 区别
Telnet Telnet是进行远程登录的标准协议,它是当今Internet上应用最广泛的协议之一.它把用户正在使用的终 端或计算机变成网络某一远程主机的仿真终端,使得用户可以方便地使用远程主机上的软 ...
- 如何使用ILAsm与ILDasm修改.Net exe(dll)文件
一.背景 最近项目组新上项目,交付的时间比较急迫,原本好的分支管理习惯没有遵守好,于是出现下面状况: 多个小伙伴在不同的分支上开发. 原本QA环境也存在一个阻碍性的bug A 一位同事在QA环境发布了 ...
- python构造一个freebuf新闻发送脚本
前言: 放假学习完web漏洞后.想写一个脚本 然而自己菜无法像大佬们一样写出牛逼的东西 尝试写了,都以失败告终. 还有一个原因:上学时间不能及时看到,自己也比较懒.邮件能提醒自己. 需要安装的模块: ...
- python 鸭子类型
首先Python不支持多态,也不用支持多态,python是一种多态语言,崇尚鸭子类型. 在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格.在这种风格中,一个对象有效的语义,不 ...
- Angular组件——父组件调用子组件方法
viewChild装饰器. 父组件的模版和控制器里调用子组件的API. 1.创建一个子组件child1里面只有一个greeting方法供父组件调用. import { Component, OnIni ...
- SpringMvc采用 http+json 实现前后端交互
演示列表 报文表示 一.Json请求和Json响应 实现:Spring4.1.1.RELEASE + jackson2.4.4+JQuery1.10.2 1.pom.xml <propertie ...