#include<bits/stdc++.h>
using namespace std;
long long gcd(long long x,int y)
{
while(y!=0)
{
int temp = x % y;
x = y;
y = temp;
}
return x;
}
int q[100000 + 10];
int main()
{
int T;
cin >> T;
for(int u = 1; u <= T ; u ++)
{
long long l , r;
memset(q,0,sizeof(q));
int k;
cin >> l >> r >> k;
long long sum = 1;
for(int i = 1; i <= k ; i ++)
{
if(q[i])
continue;
int t = gcd(i,k);
if(t != 1)
{
for(int j = i ; j <= k ; j += i )
{
q[j] = 1;
}
}
}
//cout << 1 << endl;
for(int i = 1; i <= k ; i ++)
{
if(!q[i])
sum *= i;
sum %= k;
}
//cout << 2 << endl;
long long temp = (r - l + 1) / k ,t;
t = temp;
long long ans = 1 ;
while(temp)
{
if(temp & 1)
ans = ans * sum % k;
sum = sum * sum % k;
temp >>= 1;
}
temp = t;
//cout << 3 << endl;
/*while(temp > 100)
{
sum *= sum;
sum %= k;
temp >>= 1;
}*/
//cout << temp << endl;
/*for(int i = 1; i <= temp ; i ++)
{
ans *= sum ;
ans %= k;
}*/
//cout << ans << endl;
l = temp * k + l;
//cout << l << endl;
//cout << r - l << endl;
//cout << ans << " " << l << endl;
//cout << l << endl;
for(long long i = l ; i <= r; i ++)
{
//cout << gcd(i,k) << endl;
if(gcd(i , k) == 1)
{
long long tt = i % k;
ans *= tt;
}
ans %= k;
//if(!q[i])
// ans *= i;
//cout << ans << endl;
//ans %= k;
}
//cout << 4 << endl;
cout << "Case #" << u << ": " << ans % k << endl;
}
return 0;
}
这道题比较水,注意不要炸int就ok