https://www.lydsy.com/JudgeOnline/problem.php?id=2301
比较裸的一道莫比乌斯入门题
具体题解网上多的是
比较简单
不知道为什么别人代码都那么长
没有我的优雅哈哈哈
这题不要枚举
要分块处理
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e6;
ll miu[N+10],v[N+10],A[N+10];
ll solve(ll x,ll y){
ll ans=0;
int last;
for(ll i=1;i<=min(x,y);i=last+1){
last=min(x/(x/i),y/(y/i));
ans+=(A[last]-A[i-1])*(x/i)*(y/i);
}
return ans;
}
int main(){
ll T;
cin>>T;
for(ll i=1;i<=N;i++) miu[i]=1,v[i]=0;
for(ll i=2;i<=N;i++){
if(v[i]) continue;
miu[i] = -1;
for(ll j=2*i;j<=N;j+=i){
v[j]=1;
if((j/i)%i==0) miu[j]=0;
else miu[j]*=-1;
}
}
for(int i=1;i<=N;++i)
A[i]=A[i-1]+miu[i];
while(T--){
ll a,b,c,d,k;
cin>>a>>b>>c>>d>>k;
cout<<solve(b/k,d/k)-solve((a-1)/k,d/k)-solve(b/k,(c-1)/k)+solve((a-1)/k,(c-1)/k)<<endl;
}
}