#include<iostream>
#include<cstring>
#include<algorithm>
#include<stdbool.h>
#define int long long
using namespace std;
const int maxn = 2e5 + 10;
int tot, prime[maxn], miu[maxn], sumu[maxn];
bool valid[maxn];
void acc_ios()
{
ios::sync_with_stdio(false);
cin.tie(0);
}
void getmiu()
{
tot = 0;
memset(valid, true, sizeof(valid));
valid[0] = valid[1] = false;
miu[1] = 1;
sumu[1] = 1;
for(int i = 2; i < maxn; i++)
{
if(valid[i])
{
prime[tot++] = i;
miu[i] = -1;
}
for(int j = 0; j < tot && prime[j] * i < maxn; j++)
{
valid[prime[j] * i] = false;
if(i % prime[j] == 0)
{
miu[i * prime[j]] = 0;
break;
}
else
miu[i * prime[j]] = -miu[i];
}
sumu[i] = sumu[i - 1] + miu[i];
}
}
int cal(int a, int b)
{
int ans = 0;
for(int i = 1, last; i <= min(a, b); i = last + 1)
{
//printf("%d\n", i);
last = min((a /(a / i)), (b / (b / i)));
ans += (sumu[last] - sumu[i - 1]) * (a / i) * (b / i);
}
return ans;
}
signed main()
{
acc_ios();
getmiu();
int t;
cin>>t;
while(t--)
{
int a, b, c, d, k;
cin>>a>>b>>c>>d>>k;
a--, c--;
a /= k, b /= k, c /= k, d /= k;
cout<<cal(b, d) + cal(a, c) - cal(b, c) - cal(a, d)<<endl;
}
return 0;
}
Optimize the Mobius function template
Guess you like
Origin blog.csdn.net/weixin_43891021/article/details/108248322
Ranking