【HAOI2011】problem b
数论好劲啊
原题:
对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数。
1≤n≤50000,1≤a≤b≤50000,1≤c≤d≤50000,1≤k≤50000
gcd出现,基本上可以确定是数论了
最开始脑补了一下感觉应该是容斥之类的东西,去网上搜题解,果然是容斥(反演算是建立在整除上的容斥?
然后补习po姐的ppt,发现这题居然是第一道例题
补习了一下反演,这次和第一次学的时候不一样,证明什么的都扔掉,直接记公式应用(应试套路暴力硬肛
然后实力提升了果然不一样,现在拿起笔推公式也有感觉了
题目中要求gcd(x,y)=k的xy对数,这个可以用一个函数表示:f(k)=cnt(gcd(x,y)=k)
然后gcd是建立在整除上的,所以可以往莫比乌斯反演的方向想,尝试构造函数F(i)=cnt(i|gcd(x,y))(我说的推导过程这么有代入感其实我靠自己是根本推不出来的hhh
于是
(我发现这个公式显示好像有点问题= =另存到本地即可查看)
然后就可以使用反演辣,直接从中反演出f(i)
F(i)比较容易计算
枚举i(实际上是k)的倍数即可算出答案
但是酱紫做是O(N)的,会T掉(还有n个询问)
因为可能会有很多
是相等的,所以可以直接搞一个miu的前缀和,把相等的F(i)乘上miu的前缀和即可
怎么求相等的F(i)呐,每次前缀和的右端点是min(n/(n/i),m/(m/i)),左端点是上一次的右端点即可
(我说不下去了具体还是看po姐的ppt理解吧
写代码的时候又出现傻逼错误了,不过这一次很快召唤了数学大神syq帮忙查看,所以很快就找到问题了
summiu[1]没设初值……妙啊……
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
#define ll long long
int rd(){int z=,mk=; char ch=getchar();
while(ch<''||ch>''){if(ch=='-')mk=-; ch=getchar();}
while(ch>=''&&ch<=''){z=(z<<)+(z<<)+ch-''; ch=getchar();}
return z*mk;
}
int n;
int prm[],ptt=;
bool flg[];
int miu[],smmiu[];
void slct(){
memset(flg,,sizeof(flg));
miu[]=,smmiu[]=;
for(int i=;i<=;++i){
if(!flg[i]) prm[++ptt]=i,miu[i]=-;
for(int j=;prm[j]*i<= && j<=ptt;++j){
flg[prm[j]*i]=true;
if(!(i%prm[j])){ miu[i*prm[j]]=; break;}
miu[prm[j]*i]=-miu[i];
}
smmiu[i]=miu[i]+smmiu[i-];
}
}
ll cclt(int n,int m,int k){
n/=k,m/=k;
if(n>m) swap(n,m);
ll bwl=,tmp;
for(int i=;i<=n;i=tmp+){
tmp=min(n/(n/i),m/(m/i));
bwl+=(ll)(n/i)*(m/i)*(smmiu[tmp]-smmiu[i-]);
}
return bwl;
}
int main(){//freopen("ddd.in","r",stdin);
slct();
cin>>n;
int a,b,c,d,k;
while(n--){
a=rd(),b=rd(),c=rd(),d=rd(),k=rd();
printf("%I64d\n",cclt(b,d,k)+cclt(a-,c-,k)-cclt(b,c-,k)-cclt(a-,d,k));
}
return ;
}
【HAOI2011】problem b的更多相关文章
- 【BZOJ2301】【HAOI2011】Problem B(莫比乌斯反演)
[BZOJ2301][HAOI2011]Problem B(莫比乌斯反演) 题面 Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y ...
- 清北学堂例题 LUOGU2519 【HAOI2011】PROBLEM A
题目描述 一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话(可能有相同的分数) 输入格式 第一行一个整数n,接下来n行每行两个整数,第i+1行 ...
- 【BZOJ2301】【HAOI2011】Problem b [莫比乌斯反演]
Problem b Time Limit: 50 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 对于给出的n个询问,每次 ...
- BZOJ 2301 【HAOI2011】 Problem b
Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数 ...
- 【HAOI2011】problem a
又看题解了,这样下去要跪啊QAQ 原题: 一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话(可能有相同的分数) 1≤n≤100000 0≤ ...
- 清北学堂例题 LUOGU2523【HAOI2011】problem c
题目描述 给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了,就尝试ai+1 ...
- 【题解】【HAOI2011】Problem b
\(Luogu2522\) 题目大意:求下面式子的值: \[\sum_{i=x}^n\sum_{j=y}^m[\gcd(i,j)=k] \] 这个东西直接求不好求,考虑差分,从\([1,n]\)的范围 ...
- 【BZOJ2998】Problem A(动态规划)
[BZOJ2998]Problem A(动态规划) 题面 BZOJ 题解 一个人的成绩范围可以确定为一个区间 这样就变成了 选择若干区间,不重合, 每个区间有个权值,求最大权值和 这样就可直接\(dp ...
- 【HAOI2011】向量
[题目描述] 给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个 ...
随机推荐
- img2html实现将图片转换成网页
简单介绍img2html的用法,安装就不用说了pip.这个包现只支持python2,支持python的话需改下源码这几个部分: 加注释的是修改的地方 #!/usr/bin/env python # e ...
- vue-router-4-编程式导航
想要导航到不同的 URL,用 router.push 方法,会向 history 栈添加一个新的记录 <router-link> <==>router.push // 字符串 ...
- Android知识补充(Android学习笔记)
Android知识补充 ●国际化 所谓的国际化,就是指软件在开发时就应该具备支持多种语言和地区的功能,也就是说开发的软件能同时应对不同国家和地区的用户访问,并针对不同国家和地区的用户,提供相应的.符合 ...
- [Leetcode 135]糖果分配 Candy
[题目] There are N children standing in a line. Each child is assigned a rating value. You are giving ...
- matlab中文本文件与图像转化
一 将图片转化为txt文本文件 a=imread('picture.bmp'); //读取picture.bmp图片 b=rgb2gray(a); //由rgb图 ...
- GTX使用(更新中)
1.XILINX GTX介绍GTX是Virtex系列 FPGA上的低功耗吉比特收发器,在V6芯片上GTX工作带宽范围是750Mb/s到6.6Gb/s,支持收发双向,且收发双向独立.GTX接收和发送方向 ...
- Android开发 ---Fragment片段布局
前言 Fragment想必大家不陌生吧,在日常开发中,对于Fragment的使用也很频繁,现在主流的APP中,基本的架构也都是一个主页,然后每个Tab项用Fragment做布局,不同选项做切换,使用起 ...
- git相关知识点
git add 和 git stage 有什么区别: 工作区(Working Directory).暂存区(Stage)和历史记录区(History)以及转换关系不能少: git stage 是 gi ...
- L256 翻译
Should work be placed among the causes of happiness or be regarded as a burden? Much work isexceedin ...
- Nginx web服务器
文件读取会使用到以下几个配置 1. sendfile 使用nginx作为静态资源服务时,通过配置sendfile可以有效提高文件读取效率,设置为on表示启动高效传输文件的模式.sendfile可以让N ...