#include <iostream>
#include <cstdio>
#include <string.h>
using namespace std;
long long prime[70];
int m;
long long ans(long long n)
{
long long sum=0;
long long len=1<<m;
for(int i=1;i<len;i++)//神来之笔,就是和bfs一样的二进制的做法 原来1<<m是1左移动m位。
{
int k=0,count1=1;
for(long long j=0;j<m;j++)
{
if(i&(long long) (1<<j)){
count1*=prime[j];
k++;
}
}
if(k%2==1)sum+=n/count1;
else sum-=n/count1;
}
return n-sum;
}
int main()
{
int t;
// printf("%d",1<<3);
cin>>t;
for(int j=1;j<=t;j++)
{
long long a,b,n;
cin>>a>>b>>n;
m=0;
memset(prime,0,sizeof(prime));
for(long long i=2;i*i<n;i++)
{
if(n&&n%i==0){prime[m++]=i;
while(n&&n%i==0)n/=i;}
}
if(n>1)prime[m++]=n;
cout<<"Case #"<<j<<": "<<ans(b)-ans(a-1)<<endl;
}
return 0;
}
HDU 4135 Co-prime
最新推荐文章于 2022-07-15 20:54:15 发布