luogu2522[HAOI2011]Problem b

来源:互联网 发布:淘宝联盟官方发单助手 编辑:程序博客网 时间:2024/04/28 11:35

链接

  https://www.luogu.org/problem/show?pid=2522

题解

  就是前一道题加上容斥。戳这

代码

//莫比乌斯反演#include <cstdio>#include <algorithm>#define maxn 50001using namespace std;int mu[maxn], prime[maxn], mark[maxn], s[maxn];void init(){int i, j;mu[1]=1;for(i=2;i<maxn;i++){if(!mark[i])prime[++prime[0]]=i,mu[i]=-1;for(j=1;j<=prime[0] and i*prime[j]<maxn;j++){mark[i*prime[j]]=1;if(i%prime[j]==0){mu[i*prime[j]]=0;break;}mu[i*prime[j]]=-mu[i];}}for(i=1;i<maxn;i++)s[i]=s[i-1]+mu[i];}int calc(int n ,int m){int i, last, ans=0;if(n>m)swap(n,m);for(i=1;i<=n;i=last+1){last=min(n/(n/i),m/(m/i));ans+=(s[last]-s[i-1])*(n/i)*(m/i);}return ans;}int main(){int T, a, b, c, d, k;init();for(scanf("%d",&T);T;T--){scanf("%d%d%d%d%d",&a,&b,&c,&d,&k);a=(a-1)/k, b=b/k, c=(c-1)/k, d=d/k;printf("%d\n",calc(b,d)-calc(a,d)-calc(c,b)+calc(a,c));}}


0 0
原创粉丝点击