#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
using namespace std;
#define LL long long
const int INF = 0x3f3f3f3f;
const int N = 2*1e5+10;
LL prime[N],sprime[N],x[N];
int vis[N],cnt;
void get_prime()
{
memset(vis, 1, sizeof vis);
int res=0;
for(LL i=2; i<N; i++)
{
if(vis[i])
{
prime[res++]=i;
for(LL j=i+i; j<N; j+=i) vis[j]=0;
}
}
}
void f(LL n)
{
cnt=0;
LL t=sqrt(n);
for(LL i=0; prime[i]<=t; i++)
{
if(n%prime[i]==0)
{
sprime[cnt++]=prime[i];
while(n%prime[i]==0) n/=prime[i];
}
}
if(n>1) sprime[cnt++]=n;
}
LL sovle(LL n)
{
LL ans=0;
int res=1;
x[0]=-1;
for(int i=0;i<cnt;i++)
{
int p=res;
for(int j=0; j<p; j++)
x[res++]=x[j]*sprime[i]*(-1);
}
for(int i=1; i<res; i++) ans+=n/x[i];
return ans;
}
int main()
{
int t,cas=0;
LL a,b,n;
get_prime();
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld%lld",&a,&b,&n);
f(n);
printf("Case #%d: %lld\n",++cas,(b-sovle(b))-(a-1-sovle(a-1)));
}
return 0;
}