您的位置:首页 > 其它

HDU 4135 容斥原理

2018-08-01 15:43 183 查看

思路:

直接容斥

//By SiriusRen
#include <cstdio>
using namespace std;
#define int long long
const int N=100050;
int cases,a,b,n,tp,s
;
int solve(int r){
int ans=0;
for(int i=1;i<(1<<tp);i++){
int tmp=1,t=0;
for(int j=0;j<tp;j++)
if(i&(1<<j))tmp*=s[j],t++;
t=t&1?1:-1;
ans+=r/tmp*t;
}
return r-ans;
}
signed main(){
scanf("%lld",&cases);
for(int I=1;I<=cases;I++){
tp=0;
scanf("%lld%lld%lld",&a,&b,&n);
for(int i=2;i*i<=n;i++){
if(n%i)continue;
while(n%i==0)n/=i;
s[tp++]=i;
}if(n!=1)s[tp++]=n;
printf("Case #%lld: %lld\n",I,solve(b)-solve(a-1));
}
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: