BZOJ2301:[HAOI2011]Problem b
来源:互联网 发布:学生怒骂日本记者知乎 编辑:程序博客网 时间:2024/06/18 12:00
Description
对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数。
Input
第一行一个整数n,接下来n行每行五个整数,分别表示a、b、c、d、k
Output
共n行,每行一个整数表示满足要求的数对(x,y)的个数
Sample Input
2
2 5 1 5 1
1 5 1 5 2
Sample Output
14
3
HINT
100%的数据满足:1≤n≤50000,1≤a≤b≤50000,1≤c≤d≤50000,1≤k≤50000
题目传送门
就像之前讲过的bzoj1695一样(注意他不一定是从1开始的),用分块加速,学会推公式,莫比乌斯反演翻来倒去也就那么点东西。维护一个区间~~记得清空数组。
#include<cstdio>#include<cstring>#include<cstdlib>#include<algorithm>using namespace std;const int maxn=1000000;typedef long long ll;bool check[maxn+10];int primes[maxn+10];int mu[maxn+10];//表示系数ll Sum[10000005],Pre[10000005]; void get_Mobius() { int pnum=0; memset(check,true,sizeof(check)); memset(Sum,0,sizeof(Sum)); mu[1]=1; Sum[1]=1; for(int i=2;i<maxn;i++) { if(check[i]) { primes[pnum++]=i; mu[i]=-1; } for(int j=0;j<pnum&&i*primes[j]<maxn;j++) { check[i*primes[j]]=false; if(i%primes[j]==0) { mu[i*primes[j]]=0; break; } mu[i*primes[j]]=-mu[i]; } Sum[i]=Sum[i-1]+mu[i]; } } /*只要让F(t)=满足gcd(x,y)%t==0的数对个数 f(t)=满足gcd(x,y)=t的数对个数,则F(t)和f(t)就存在莫比乌斯反演的关系了。显然F(t)=(b/t)*(d/t) 因为如果gcd(x,y)=1,则gcd(x?k,y?k)=k,所以我们把b和d同时除以k,得到的f(1)再去重就是答案。令lim=min(b/k,d/k),就根据我给出的莫比乌斯反演第二个公式, */int find(int x,int y){ if(x>y)swap(x,y); ll re=0;int j; for(int i=1,j=0;i<=x;i=j+1) { j=min(x/(x/i),y/(y/i)); re+=(long long)(Sum[j]-Sum[i-1])*(x/i)*(y/i); } return re;}int main(){ int T; int a,b,c,d,k; get_Mobius(); scanf("%d",&T); for(int ii=1;ii<=T;ii++) { scanf("%d%d%d%d%d",&a,&b,&c,&d,&k); if(k==0) { printf("0\n"); continue; } long long ans=0; ans=find(b/k,d/k)-find((a-1)/k,d/k)-find((c-1)/k,b/k)+find((a-1)/k,(c-1)/k); printf("%lld\n",ans); } return 0;}
by_lmy
阅读全文
0 0
- BZOJ2301【HAOI2011】Problem b
- bzoj2301: [HAOI2011]Problem b
- [BZOJ2301][HAOI2011]Problem b
- bzoj2301【HAOI2011】Problem b
- Problem b [HAOI2011][bzoj2301]
- 【bzoj2301】 [HAOI2011]Problem b
- bzoj2301 [HAOI2011]Problem b
- 【bzoj2301】[HAOI2011]Problem b
- BZOJ2301: [HAOI2011]Problem b
- bzoj2301 [HAOI2011]Problem b
- 【bzoj2301】[HAOI2011]Problem b
- BZOJ2301 HAOI2011 Problem b
- bzoj2301 [HAOI2011]Problem b
- BZOJ2301:[HAOI2011]Problem b
- BZOJ2301 [HAOI2011]Problem b
- 【BZOJ2301】[HAOI2011]Problem b
- [bzoj2301: [HAOI2011]Problem b] 求
- bzoj2301: [HAOI2011]Problem b 莫比乌斯反演
- Hashmap and Java.io PrintWriter
- Python enumerate
- uva 12168
- 水池数目
- [数据结构]字符串匹配——朴素算法
- BZOJ2301:[HAOI2011]Problem b
- javaweb学习总结(六)——Servlet开发(一)
- HTML基本语法
- java编写模拟登陆爬虫
- javaweb学习总结(六)——Servlet开发(二)
- ERROR 1010 (HY000): Error dropping database (can't rmdir './myapp', errno: 39)
- 1. 数据预处理-数据归一化和数据规范化
- 测试小故事41:乒乓
- iOS @property 重构set、get方法