数论好劲啊

原题:

对于给出的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的更多相关文章

  1. 【BZOJ2301】【HAOI2011】Problem B(莫比乌斯反演)

    [BZOJ2301][HAOI2011]Problem B(莫比乌斯反演) 题面 Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y ...

  2. 清北学堂例题 LUOGU2519 【HAOI2011】PROBLEM A

    题目描述 一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话(可能有相同的分数) 输入格式 第一行一个整数n,接下来n行每行两个整数,第i+1行 ...

  3. 【BZOJ2301】【HAOI2011】Problem b [莫比乌斯反演]

    Problem b Time Limit: 50 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 对于给出的n个询问,每次 ...

  4. 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 第一行一个整数 ...

  5. 【HAOI2011】problem a

    又看题解了,这样下去要跪啊QAQ 原题: 一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话(可能有相同的分数) 1≤n≤100000   0≤ ...

  6. 清北学堂例题 LUOGU2523【HAOI2011】problem c

    题目描述 给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了,就尝试ai+1 ...

  7. 【题解】【HAOI2011】Problem b

    \(Luogu2522\) 题目大意:求下面式子的值: \[\sum_{i=x}^n\sum_{j=y}^m[\gcd(i,j)=k] \] 这个东西直接求不好求,考虑差分,从\([1,n]\)的范围 ...

  8. 【BZOJ2998】Problem A(动态规划)

    [BZOJ2998]Problem A(动态规划) 题面 BZOJ 题解 一个人的成绩范围可以确定为一个区间 这样就变成了 选择若干区间,不重合, 每个区间有个权值,求最大权值和 这样就可直接\(dp ...

  9. 【HAOI2011】向量

    [题目描述] 给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个 ...

随机推荐

  1. js中 offset /client /scroll总结

    offset家族(只能读取,不能操作): offsetLeft:元素的边框的外边缘距离与已定位的父容器(offsetparent)的左边距离(就是子元素左边框到父元素左边框的距离). offsetTo ...

  2. python中字典常用的方法

    #定义一个空字典: a={ } 定义一个字典: d={'age':18} #增加一个元素: d['age']=20   d[k]=v d.setdefault('age',18)    d.setde ...

  3. flask-admin有用的例子

    flask-admin主页: https://github.com/flask-admin/flask-admin flask-admin克隆地址: https://github.com/flask- ...

  4. wordpress有用的插件

    代码高亮 https://wordpress.org/plugins/crayon-syntax-highlighter/ 这个貌似比较好用 百度UEditor(富文本编辑器) https://www ...

  5. 读书笔记 C# 接口之浅析

    一.接口可以包含 属性.方法.事件和索引器: 二.接口不能被实例化: 三.一个类可以继承多个接口: 四.接口不能包含方法的实现: 五.继承接口的类必须实现接口中所有成员: 六.显式实现接口的成员,不能 ...

  6. <HBase><Scan>

    Overview The Scan operation for HBase. Scan API All operations are identical to Get with the excepti ...

  7. 『转』android官网翻译好的蓝牙API接口说明

    Develop API Guides 连接 蓝牙 本文内容 基础知识 蓝牙权限 设置蓝牙 查找设备 查询配对的设备 发现设备 连接设备 连接为服务器 连接为客户端 管理连接 使用配置文件 供应商特定的 ...

  8. css , dl , dt , dd 的使用. calc

    dl .dt, dd 虽然很少使用, 但是 有时使用会有 更好的效果: 一: 展示图片: ------------------------- 代码: <!DOCTYPE html> < ...

  9. ES脑裂问题

    脑裂:一个集群中的不同节点对于集群的状态有了不一样的理解 ES集群的总体状态是red,本来9个节点的集群在结果中只显示4个节点在线: 正常情况下,集群中的所有节点应该对集群中的master的选择是一致 ...

  10. svn+http+ad域

    svn本地添加用户太麻烦了,如果公司有一百个开发人员要访问,要创建账号密码太麻烦了:所以让他们用AD域账号去登录就很方便,但是权限的管控还是在svn的本地添加(这个暂时还没办法很好的解决) 一.安装依 ...