hdu4135(容斥原理)

来源:互联网 发布:中国网络安全部队 编辑:程序博客网 时间:2024/05/21 08:03

http://acm.hdu.edu.cn/showproblem.php?pid=4135

参考:http://www.cnblogs.com/kane0526/archive/2013/03/14/2795446.html


#include <stdio.h>#include <string.h>#include <iostream>#include <queue>#include <set>#include <math.h>>#include <algorithm>using namespace std;vector<int>vt;long long n,a,b,res;long long q[1024];void fx(){//找因子    vt.clear();    res=n;    for(int i=2;i*i<=n;i++)if(res%i==0){        vt.push_back(i);        while(res%i==0) res/=i;    }    if(res>1) vt.push_back(res);}long long cal(long long n,long long t){    int num=0;    q[num++]=1;    for(int i=0;i<vt.size();i++){        int ep=vt[i];        int k=num;        for(int j=0;j<k;j++) q[num++]=ep*q[j]*(-1);    }            long long sum=0;    for(int i=0;i<num;i++) sum+=t/q[i];    return sum;}int main(){    int T,t=0;    scanf("%d",&T);    while(T--){        scanf("%lld%lld%lld",&a,&b,&n);        fx();        long long ans=cal(n,b)-cal(n,a-1);        printf("Case #%d: %lld\n",++t,ans);    }//while    return 0;}


0 0