#include <iostream>
#include <vector>
#include <algorithm>
#define Compute_prime 100000
using namespace std;
bool* PrimeArray;
void swap(vector< long long> &arr,int i, int j)
{
int temp;
if (i != j)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
void Permutation(vector< long long> &arr, vector< long long> &arr2,int n, int r, int depth) //Permutation(N,R,0); NcR
{
int i;
long long mid_value=1;
if (n == r)
{
for (i = 0; i<r; i++) {
mid_value *= arr[i];
}
arr2.push_back(mid_value);
return;
}
if (r == depth) {
for (i = 0; i<r; i++) {
mid_value *= arr[i];
}
arr2.push_back(mid_value);
}
for (i = depth; i<n; i++) {
swap(arr,i, depth);
Permutation(arr,arr2,n, r, depth + 1);
swap(arr,i, depth);
}
}
long long numberOfMultuples( long long A, long long B, long long n)
{
if (n == 1)
return B + 1 - A;
else if (A%n == 0)
return (B / n) - (A / n)+1;
else
return (B / n) - (A / n);
}
void Eratos(int n)
{
if (n <= 1) return;
for (int i = 2; (i*i) <= n; i++)
{
if (PrimeArray[i])
{
for (int j = i*i; j <= n; j += i) PrimeArray[j] = false;
}
}
}
void Factorization(vector< long long> &arr, long long N)
{
for (long long i = 2; i <= N; i++)
if (i<Compute_prime && PrimeArray[i] && N%i == 0 )
{
arr.push_back(i);
while(N%i==0) N /= i;
}
else if (i >= Compute_prime-2)
{
arr.push_back(N);
break;
}
}
int main()
{
int T;
scanf("%d", &T);
PrimeArray = new bool[Compute_prime+1];
Eratos(Compute_prime);
for (int j = 0; j<T; j++)
{
long long A, B, N, sum = 0;
cin >> A >> B >> N;
vector< long long> arr;
Factorization(arr, N);
sum = B + 1 - A;
for (int i = 1; i <= arr.size(); i++) //i가 1일때는 arr.size() C 1
{
vector< long long> arr2;
Permutation(arr, arr2, arr.size(), i, 0);
sort(arr2.begin(), arr2.end());
arr2.erase(unique(arr2.begin(), arr2.end()), arr2.end());
if (i % 2 == 1) // -차례
{
for (int j = 0; j < arr2.size(); j++)
sum -= numberOfMultuples(A, B, arr2[j]);
}
else // +차례
{
for (int j = 0; j < arr2.size(); j++)
sum += numberOfMultuples(A, B, arr2[j]);
}
}
printf("Case #%d: %lld\n", j + 1, sum);
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojZGVmaW5lIENvbXB1dGVfcHJpbWUgMTAwMDAwCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpib29sKiBQcmltZUFycmF5OwoKdm9pZCBzd2FwKHZlY3RvcjwgbG9uZyBsb25nPiAmYXJyLGludCBpLCBpbnQgaikKewoJaW50IHRlbXA7CglpZiAoaSAhPSBqKQoJewoJCXRlbXAgPSBhcnJbaV07CgkJYXJyW2ldID0gYXJyW2pdOwoJCWFycltqXSA9IHRlbXA7Cgl9Cn0KCnZvaWQgUGVybXV0YXRpb24odmVjdG9yPCBsb25nIGxvbmc+ICZhcnIsIHZlY3RvcjwgbG9uZyBsb25nPiAmYXJyMixpbnQgbiwgaW50IHIsIGludCBkZXB0aCkgLy9QZXJtdXRhdGlvbihOLFIsMCk7IE5jUgp7CglpbnQgaTsKCSBsb25nIGxvbmcgbWlkX3ZhbHVlPTE7CglpZiAobiA9PSByKQoJewoJCWZvciAoaSA9IDA7IGk8cjsgaSsrKSB7CgkJCW1pZF92YWx1ZSAqPSBhcnJbaV07CgkJfQoJCWFycjIucHVzaF9iYWNrKG1pZF92YWx1ZSk7CgkJcmV0dXJuOwoJfQoJaWYgKHIgPT0gZGVwdGgpIHsKCQlmb3IgKGkgPSAwOyBpPHI7IGkrKykgewoJCQltaWRfdmFsdWUgKj0gYXJyW2ldOwoJCX0KCQlhcnIyLnB1c2hfYmFjayhtaWRfdmFsdWUpOwoJfQoKCWZvciAoaSA9IGRlcHRoOyBpPG47IGkrKykgewoJCXN3YXAoYXJyLGksIGRlcHRoKTsKCQlQZXJtdXRhdGlvbihhcnIsYXJyMixuLCByLCBkZXB0aCArIDEpOwoJCXN3YXAoYXJyLGksIGRlcHRoKTsKCX0KfQoKCmxvbmcgbG9uZyBudW1iZXJPZk11bHR1cGxlcyggbG9uZyBsb25nIEEsICBsb25nIGxvbmcgQiwgIGxvbmcgbG9uZyBuKQp7CglpZiAobiA9PSAxKQoJCXJldHVybiBCICsgMSAtIEE7CgllbHNlIGlmIChBJW4gPT0gMCkKCQlyZXR1cm4gKEIgLyBuKSAtIChBIC8gbikrMTsKCWVsc2UKCQlyZXR1cm4gKEIgLyBuKSAtIChBIC8gbik7Cn0KCnZvaWQgRXJhdG9zKGludCBuKQp7CglpZiAobiA8PSAxKSByZXR1cm47CgoKCWZvciAoaW50IGkgPSAyOyAoaSppKSA8PSBuOyBpKyspCgl7CgkJaWYgKFByaW1lQXJyYXlbaV0pCgkJewoJCQlmb3IgKGludCBqID0gaSppOyBqIDw9IG47IGogKz0gaSkgUHJpbWVBcnJheVtqXSA9IGZhbHNlOwoJCX0KCX0KfQoKdm9pZCBGYWN0b3JpemF0aW9uKHZlY3RvcjwgbG9uZyBsb25nPiAmYXJyLCAgbG9uZyBsb25nIE4pCnsKCWZvciAobG9uZyBsb25nIGkgPSAyOyBpIDw9IE47IGkrKykKCQlpZiAoaTxDb21wdXRlX3ByaW1lICYmIFByaW1lQXJyYXlbaV0gJiYgTiVpID09IDAgKQoJCXsKCQkJYXJyLnB1c2hfYmFjayhpKTsKCQkJd2hpbGUoTiVpPT0wKSBOIC89IGk7CgkJfQoJCWVsc2UgaWYgKGkgPj0gQ29tcHV0ZV9wcmltZS0yKQoJCXsKCQkJYXJyLnB1c2hfYmFjayhOKTsKCQkJYnJlYWs7CgkJfQp9CgppbnQgbWFpbigpCnsKCWludCBUOwoKCXNjYW5mKCIlZCIsICZUKTsKCglQcmltZUFycmF5ID0gbmV3IGJvb2xbQ29tcHV0ZV9wcmltZSsxXTsKCUVyYXRvcyhDb21wdXRlX3ByaW1lKTsKCQoJZm9yIChpbnQgaiA9IDA7IGo8VDsgaisrKQoJewoJCSBsb25nIGxvbmcgQSwgQiwgTiwgc3VtID0gMDsKCQljaW4gPj4gQSA+PiBCID4+IE47CgoJCXZlY3RvcjwgbG9uZyBsb25nPiBhcnI7CgoJCUZhY3Rvcml6YXRpb24oYXJyLCBOKTsKCQkKCQlzdW0gPSBCICsgMSAtIEE7CgkJZm9yIChpbnQgaSA9IDE7IGkgPD0gYXJyLnNpemUoKTsgaSsrKSAvL2nqsIAgMeydvOuVjOuKlCBhcnIuc2l6ZSgpIEMgMQoJCXsKCQkJdmVjdG9yPCBsb25nIGxvbmc+IGFycjI7CgkJCVBlcm11dGF0aW9uKGFyciwgYXJyMiwgYXJyLnNpemUoKSwgaSwgMCk7CgkJCXNvcnQoYXJyMi5iZWdpbigpLCBhcnIyLmVuZCgpKTsKCQkJYXJyMi5lcmFzZSh1bmlxdWUoYXJyMi5iZWdpbigpLCBhcnIyLmVuZCgpKSwgYXJyMi5lbmQoKSk7CgkJCWlmIChpICUgMiA9PSAxKSAvLyAt7LCo66GACgkJCXsJCQoJCQkJZm9yIChpbnQgaiA9IDA7IGogPCBhcnIyLnNpemUoKTsgaisrKQoJCQkJCXN1bSAtPSBudW1iZXJPZk11bHR1cGxlcyhBLCBCLCBhcnIyW2pdKTsKCgkJCX0KCQkJZWxzZSAvLyAr7LCo66GACgkJCXsKCQkJCWZvciAoaW50IGogPSAwOyBqIDwgYXJyMi5zaXplKCk7IGorKykKCQkJCQlzdW0gKz0gbnVtYmVyT2ZNdWx0dXBsZXMoQSwgQiwgYXJyMltqXSk7CgkJCX0KCQl9CgoJCXByaW50ZigiQ2FzZSAjJWQ6ICVsbGRcbiIsIGogKyAxLCBzdW0pOwoJfQp9