#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; }