题目链接:点击打开链接
题目大意:有a,b,c,在【a,b】中,有多少个与c互质的数;
#include<stdio.h>
#include<string.h>
long long zy[1000];
long long g[1000];
int k;
void zhi(long long n)//存储n的质因数
{
long long i;
for(i=2; i*i<=n; i++)
{
if(n%i==0)
zy[k++]=i;
while(n%i==0) n/=i;
}
if(n>1) zy[k++]=n;
}
long long ff(long long n)//容斥原理的核心代码
{
long long sum=n;
long long j=0;
g[j++]=1;
for(long long i=0; i<k; i++)
{
long long p=j;
for(long long h=0; h<j; h++)
{
g[p]=-g[h]*zy[i];
sum+=n/g[p];
p++;
}
j=p;
}
return sum;
}
int main()
{
int t,tt=1;
scanf("%d",&t);
while(t--)
{
long long a,b,c;
scanf("%lld%lld%lld",&a,&b,&c);
k=0;
zhi(c);
long long l1=ff(a-1);
long long l2=ff(b);
printf("Case #%d: %lld\n",tt++,l2-l1);
}
return 0;
}