解题思路来自于:https://blog.csdn.net/h1021456873/article/details/51175640
#include<bits/stdc++.h>
using namespace std;
long long s[1500];
long long que[10000];
long long num;
void f(long long n)
{
num=0;
int m=sqrt(n+0.5);
for(int i=2;i<=m;i++)
{
if(n%i==0)
{
s[num++]=i;
while(n%i==0)
n/=i;
}
}
if(n>1) s[num++]=n;
}
long long g(long long n)
{
long long sum=0,t=0;
que[t++]=-1;
for(int i=0;i<num;i++)
{
long long k=t;
for(int j=0;j<k;j++)
que[t++]=que[j]*s[i]*(-1);
}
for(int i=1;i<t;i++)
sum+=n/que[i];
return sum;
}
int main()
{
int t;
long long a,b,n;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&a,&b,&n);
f(n);
long long ans=b-g(b)-(a-1-g(a-1));
printf("%lld\n",ans);
}
return 0;
}