求:
根据容斥原理,可以分为四部分来求,每一部分都可以拆成:
考虑到可以转化,所以为了化简式子,可以:原式
式子出现莫比乌斯函数后,通常可以考虑交换求和顺序,枚举,即:
很显然,只要预处理莫比乌斯函数,然后用数论分块求解式子。
Code:
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e4+7;
int mu[maxn + 1],sum[maxn+1];
int work(int n,int m) {
int tot=min(n,m);
int x,y,r,ans=(0);
for(int i=1;i<=tot;++i) {
x=n/i,y=m/i;
r=min(n/x,m/y);
ans+=(sum[r]-sum[i-1])*x*y;
i=r;
}
return ans;
}
signed main() {
cin.sync_with_stdio(false), cin.tie(nullptr),cout.tie(nullptr);
mu[1] = 1;
for (int i = 1; i <= maxn; i++) {
for (int j = 2 * i; j <= maxn; j += i) {
mu[j] -= mu[i];
}
sum[i]=sum[i-1]+mu[i];
}
int T,a,b,c,d,k;
cin>>T;
while(T--) {
cin>>a>>b>>c>>d>>k;
cout<<work(b/k,d/k)-work((a-1)/k,d/k)-work(b/k,(c-1)/k)+work((a-1)/k,(c-1)/k)<<'\n';
}
return 0;
} 
京公网安备 11010502036488号