P2522-[HAOI2011]Problem b【莫比乌斯反演】
正题
题目大意
求∑i=ab∑j=cd(gcd(i,j)==k)\sum_{i=a}^b\sum_{j=c}^d(gcd(i,j)==k)i=a∑bj=c∑d(gcd(i,j)==k)
解题思路
定义
f(i)=∑i=1n∑j=1m(gcd(i,j)==i)f(i)=\sum_{i=1}^n\sum_{j=1}^m(gcd(i,j)==i)f(i)=i=1∑nj=1∑m(gcd(i,j)==i)
然后计算f利用容斥计算答案
之后我们考虑如何计算
F(i)=∑dd∣if(i)F(i)=\sum^{d|i}_df(i)F(i)=d∑d∣if(i)
显然可得出
F(i)=⌊ni⌋⌊mi⌋F(i)=\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{i}\rfloorF(i)=⌊in⌋⌊im⌋
然后莫比乌斯反演一下
f(i)=∑d∣iμ(dk)+F(d)f(i)=\sum_{d|i}\mu(\frac{d}{k})+F(d)f(i)=d∣i∑μ(kd)+F(d)
f(i)=∑d∣iμ(dk)+⌊nd⌋⌊md⌋f(i)=\sum_{d|i}\mu(\frac{d}{k})+\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloorf(i)=d∣i∑μ(kd)+⌊dn⌋⌊dm⌋
时间复杂度降低到O(n)O(n)O(n)
之后我们可以发现⌊nd⌋\lfloor\frac{n}{d}\rfloor⌊dn⌋只有2n2\sqrt n2n种取值,那么⌊ni⌋⌊mi⌋\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{i}\rfloor⌊in⌋⌊im⌋最多就有2(n+m)2(\sqrt n+\sqrt m)2(n+m)种取值,我们可以直接计算这个范围内莫比乌斯函数的前缀和然后直接O(min{n,m})O(\sqrt {min\{n,m\}})O(min{n,m})计算答案
code
// luogu-judger-enable-o2
#include<cstdio>
#include<algorithm>
#define N 50000
#define ll long long
using namespace std;
ll miu[N+10],c,d,a,b,k,t;
bool v[N+10];
void sumul()
{for(ll i=1;i<=N;i++) miu[i]=1,v[i]=0;for(ll i=2;i<=N;i++){if(v[i]) continue;miu[i]=-1;for(ll j=2*i;j<=N;j+=i){v[j]=1;if((j/i)%i==0) miu[j]=0;else miu[j]*=-1;}}for(ll i=1;i<=N;i++)miu[i]+=miu[i-1];
}
ll ask(ll n,ll m)
{if(n>m) swap(n,m);ll last,re=0;n/=k;m/=k;for(ll i=1;i<=n;i=last+1){last=min(n/(n/i),m/(m/i));re+=(n/i)*(m/i)*(miu[last]-miu[i-1]);}return re;
}
int main()
{sumul();scanf("%lld",&t);for(ll i=1;i<=t;i++){scanf("%lld%lld%lld%lld%lld",&a,&b,&c,&d,&k);printf("%lld\n",ask(b,d)+ask(a-1,c-1)-ask(a-1,d)-ask(b,c-1));}
}
P2522-[HAOI2011]Problem b【莫比乌斯反演】相关推荐
- P2522 HAOI2011 Problem b [莫比乌斯反演,数论分块]
P2522 HAOI2011 题意 对于给出的n个询问,每次求有多少个数对(x,y)(x,y)(x,y),满足a≤x≤ba≤x≤ba≤x≤b,c≤y≤dc≤y≤dc≤y≤d,且gcd(x,y)=kgc ...
- BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】
2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MB Submit: 4032 Solved: 1817 [Submi ...
- [POI2007]ZAP-Queries [HAOI2011]Problem b 莫比乌斯反演
1,[POI2007]ZAP-Queries ---题面--- 题解: 首先列出式子:$$ans = \sum_{i = 1}^{n}\sum_{j = 1}^{m}[gcd(i, j) == d]$ ...
- BZOJ2301:[HAOI2011]Problem b(莫比乌斯反演,容斥)
Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数 ...
- BZOJ2301: [HAOI2011]Problem b(莫比乌斯反演)
Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数 ...
- P2522 [HAOI2011]Problem b (莫比乌斯反演)
P2522 [HAOI2011]Problem b 题意: n个询问,在 a ≤ x ≤ b , c ≤ y ≤ d a\le x\le b, c \le y \le d a≤x≤b,c≤y≤d范围内 ...
- P2522 [HAOI2011]Problem b
P2522 [HAOI2011]Problem b 题意: 对于给出的 n 个询问,每次求有多少个数对 (x,y),满足 a≤x≤b,c≤y≤d,且 gcd(x,y)=k,gcd(x,y) 函数为 x ...
- 洛谷P2522 [HAOI2011]Problem b(莫比乌斯反演)
传送门 我们考虑容斥,设$ans(a,b)=\sum_{i=1}^a\sum_{j=1}^b[gcd(a,b)==k]$,这个东西可以和这一题一样去算洛谷P3455 [POI2007]ZAP-Quer ...
- HDU 6833 A Very Easy Math Problem(莫比乌斯反演)
原题题面 Given you n,x,k , find the value of the following formula: ∑ a 1 = 1 n ∑ a 2 = 1 n . . . ∑ a x ...
- BZOJ 2301: [HAOI2011]Problem b
二次联通门 : BZOJ 2301: [HAOI2011]Problem b /*BZOJ 2301: [HAOI2011]Problem b莫比乌斯反演 + 容斥将k除下来后就变为了一道原题后像求二 ...
最新文章
- Java判断类和实例的关系
- SAP Spartacus 服务器端渲染模式下,在 Node.js 服务器端渲染视图的单步调试
- 电脑开机速度慢?新手试试以下这几个小技巧!
- 求f(x,n)(信息学奥赛一本通-T1166)
- 如何在Android中使用OpenCV
- 让fedora满足你的日常办公和影音
- Linux系统编程 -- 多线程之基于阻塞队列生产者与消费者模型
- 不刷新改变/更换URL: pushState + Ajax
- TDD---测试驱动开发(1)
- 从 Promise、Async/Await 、Generator等角度实现一个 sleep 函数
- Spring概述(精)
- win10 Eprime 2.0安装记录
- 黑马python就业班_2017年最新黑马Python2017年就业班不加密视频教程
- win7科学计算机不支持,win7“不支持的硬件,你的电脑使用的处理器专为最新版win...
- 软键盘遮挡edittext_Android软键盘遮挡的四种解决方案
- 回归模型+自变量和因变量之间的关系、回归模型的种类、回归模型的输出类型、个数角度
- 主干分支开发模式_源代码主干分支开发四大模式
- [云上贵州2017]智慧交通预测挑战赛
- JS学习笔记:Javascript给对象增加属性(函数作为属性)
- 用于期望视场中光导耦合的二元光栅的优化
热门文章
- 128位计算机 ps2,64位就是最强电脑?难道就没有128位的电脑吗
- python中字典长度可变吗_python中列表长度可变吗
- python编写程序计算1+2+3+......+100和_Python3:计算两个列表总和为100的所有排列的最有效方法是什么?...
- java编程_Java编程和C语言的比较
- 洛谷 P1506 拯救oibh总部-dfs染色法
- 算法-二分搜索-找出最大值和次大值
- linux jdk1.7 tomcat mysql_Linux环境搭建 jdk+tomcat+mysql
- 调用其他app 的lib_ButterKnife执行效率为什么比其他注入框架高?它的原理是什么...
- python通过tkinter界面库实现三角形成立的测试
- 准确率、召回率、F1、mAP、ROC、AUC