#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define LL __int64
LL p[100005];
int tol = 0;
void init(LL n)
{
tol = 0;
for (int i = 2; i*i < n; i++)
{
if (n%i == 0)
{
p[tol++] = i;
while (n%i == 0)
n /= i;
}
}
if (n>1) p[tol++] = n;
}
LL cal(LL n, LL c)
{
LL que[100006] = { 1, 0 };
int num = 1;
for (int i = 0; i < tol; i++)
{
int k = num;
for (int j = 0; j < k; j++)
{
que[num++] = que[j] * p[i] * -1;
}
}
LL ans = 0;
for (int i = 0; i < num; i++)
ans += n / que[i];
return ans;
}
int main()
{
int T, cas = 1;
scanf("%d", &T);
while (T--)
{
LL a, b, n;
scanf("%I64d%I64d%I64d", &a, &b, &n);
init(n);
printf("Case #%d: %I64d\n", cas++, cal(b, n) - cal(a - 1, n));
}
return 0;
}
hdu 4135 Co-prime(容斥原理)
最新推荐文章于 2020-05-01 15:45:11 发布