【刷题】BZOJ 2820 YY的GCD
Description
Input
Output
Sample Input
10 10
100 100
Sample Output
2791
HINT
T = 10000
N, M <= 10000000
Solution
最近开始狂补东西
莫比乌斯反演就是之一,然后做题
个人认为反演里要设计出F(x)和f(x)是有难度的,其他大佬们都说做多了就是套路了,所以还欠火候,加紧做题
对于这道题,我们设F(d)为gcd为d及其倍数的对数的个数,设f(x)为gcd为d的对数的个数
那么我们有
进行反演
那么需要求的就是(p为质数,小于等于N也小于等于M)
改变枚举顺序,把枚举p的倍数变成枚举上式的d/p
并且因为
式子变为
我们令T=dp,把枚举d变为枚举T,同时把后边的两个分式提出来
发现后面的可以在素数筛的时候预处理,那么对于一组数据就可做了
对于多组数据,我们发现这个式子是可以整除分块的,优化后就可以过了
对于预处理,我们设一个g(T)
素数筛的时候,令k=i*prime[j]
1)如果prime[j]整除i,mu[k]=0
2)如果不整除,那么根据定义,mu[k]=-mu[i]
因为筛中每个数只会筛到一次,所以赋值之后就不会再被覆盖
由于之前用了整除分块,所以g还需要一个数组s存前缀和,分块时就可以直接把值拿出来了
#include<bits/stdc++.h>
#define ll long long
const int MAXN=+;
ll T,prime[MAXN],cnt,g[MAXN],s[MAXN],mu[MAXN];
bool vis[MAXN];
template<typename T> inline void read(T &x)
{
T data=,w=;
char ch=;
while(ch!='-'&&(ch<''||ch>''))ch=getchar();
if(ch=='-')w=-,ch=getchar();
while(ch>=''&&ch<='')data=((T)data<<)+((T)data<<)+(ch^''),ch=getchar();
x=data*w;
}
template<typename T> inline void write(T x,char c='\0')
{
if(x<)putchar('-'),x=-x;
if(x>)write(x/);
putchar(x%+'');
if(c!='\0')putchar(c);
}
template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
template<typename T> inline T min(T x,T y){return x<y?x:y;}
template<typename T> inline T max(T x,T y){return x>y?x:y;}
inline void init()
{
memset(vis,true,sizeof(vis));
vis[]=vis[]=;
mu[]=;
for(register int i=;i<MAXN;++i)
{
if(vis[i])
{
prime[++cnt]=i;
mu[i]=-;
}
for(register int j=;j<=cnt&&i*prime[j]<MAXN;++j)
{
vis[i*prime[j]]=;
if(i%prime[j])mu[i*prime[j]]=-mu[i];
else break;
}
}
for(register int j=;j<=cnt;++j)
for(register int i=;i*prime[j]<MAXN;++i)g[i*prime[j]]+=mu[i];
for(register int i=;i<MAXN;++i)s[i]=s[i-]+g[i];
}
inline ll solve(ll N,ll M)
{
ll ans=;
for(register int i=;;)
{
if(i>min(N,M))break;
ll j=min(N/(N/i),M/(M/i));
ans+=(N/i)*(M/i)*(s[j]-s[i-]);
i=j+;
}
return ans;
}
int main()
{
init();
read(T);
while(T--)
{
ll N,M;
read(N);read(M);
write(solve(N,M),'\n');
}
return ;
}
2820 YY的GCD
【刷题】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(莫比乌斯反演+除法分块)
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(莫比乌斯反演)
Description 神犇YY虐完数论后给傻×kAc出了一题 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 kAc这种傻× ...
- ●BZOJ 2820 YY的GCD
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2820 题解: 莫比乌斯反演 先看看这个题:HDU 1695 GCD(本题简化版) HDU 1 ...
- BZOJ 2820 YY的GCD(莫比乌斯函数)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2820 题意:给定n,m.求1<=x<=n, 1<=y<=m且Gc ...
随机推荐
- OpenGL(1)-环境搭建
写在前面 工作几年,开始沉心做技术,对自己的知识进行梳理. OpenGL是由khronos组织制定并维护的规范,并不是API. OpenGL在3.2之前采用的是立即渲染模式(固定渲染管线),3.2之后 ...
- Swing的概述
Swing在Java中是一个包,下面就是它的基本概述:简介: Java为了方便图形界面的实现, 专门设计了类库来满足各种各样的图形元素和用户交互事件, 该类库即为抽象窗口工具箱(Abstract Wi ...
- 火狐插件安装-基于web自动化测试
一.Firebug 安装 1. 打开火狐浏览器—选择右上角“打开菜单”(图一)----附件组件(图二) 图一 图二 2. 点击:扩展(图三)—-------用于所有附加组件的工具(图四)----选 ...
- ActiveMQ笔记:管理和监控
ActiveMQ提供了比较丰富的监控和管理工具.在ActiveMQ的网页里(http://activemq.apache.org/how-can-i-monitor-activemq.html)提到了 ...
- 自定义UIView怎么注册销毁NSNotification通知
问题描述:在使用天猫tangram框架后.部分组件自定义后会用到通知,但是在iOS 8 系统中,会崩溃? 原因分析:当对象挂掉后,要对应移除注册的通知. 否则当你重复执行发送通知的时候,在iOS8 系 ...
- java布局学习(新)
坚持学习java一段时间,最近自己需要做一个小型的系统,所以需要自己将自己的AWT知识巩固一下. 一.4大布局管理器. 1.边界布局BorderLayout 是JFrame和JDialog的默认布局方 ...
- Alpha版会议总结
目前的进度: 实现了文字备忘的录入: 实现了提醒功能: 实现了可视化界面: 语音录入功能还没有完成: 界面相当粗糙: 遇到的问题: 语音录入按钮按下后没有反应,目前没有解决思路和方法. 原本的解屏功能 ...
- Chapter 9 软件实现
软件实现包括代码设计.设计审查.代码编写.代码走查.代码编译和单元测试等活动.程序设计语言有很多,从机器语言到高级语言一直发展.软件编码需要遵循一些规范,JAVA代码有适当的空行,代码行及行内空格.分 ...
- fragment的学习
这个讲的不错 http://blog.csdn.net/lmj623565791/article/details/37992017 Fragment与Activity交互的几种方式(二,使用Bund ...
- 个人作业2--APP案例分析
产品 选择产品:酷狗音乐播放器 版本:Android版 选择理由:是我高中就开始用的音乐播放软件,在平时使用频率比较高,平时喜欢在累的时候听音乐放松. 调研 第一次上手体验 第一次使用的时候,感觉整个 ...