【容斥原理】HDU 4135
2012-02-28 21:16
162 查看
容斥原理的应用,分别找1~a的和1~b的个数,相减就是答案,其中找的时候要用容斥原理求,因为有些会重复计数
#define N 1000005 int p ; int cnt; void factor(int n){ int i; int a = 1; for(i=2;i*i<=n;i+=a,a=2){ if(n%i==0){ p[cnt++] = i; while(n%i==0){ n/=i; } } } if(n>1)p[cnt++] = n; } LL cal(LL n){ int i,j; LL res = 0; for(i=0;i<(1<<cnt);i++){//二进制压缩状态,因为n<=1e9,所以素数只有10个左右,0代表不取,1表示取 LL mul = 1; int k=0; int tmp = i; for(j=0;j<cnt;j++){ if(tmp & 1){ k++; mul *= p[j]; } tmp>>=1; } if(k&1){//容斥原理,奇数个要加 res += n/mul; } else if(k>0){//偶数个的时候要减,注意k>0 res -= n/mul; } } return n-res; } LL gao(LL a,LL b,int n){ factor(n); return cal(b) - cal(a-1); } int main(){ int t; scanf("%d",&t); int ca=1; while(t--){ LL a,b; int n; scanf("%I64d%I64d%d",&a,&b,&n); cnt=0; LL ans = gao(a,b,n); printf("Case #%d: %I64d\n",ca++,ans); } return 0; }
相关文章推荐
- hdu 4135 (容斥原理)
- hdu 4135(容斥原理)
- hdu 4135 Co-prime 容斥原理
- HDU 4135 容斥原理
- HDU - 4135 - Co-prime - (容斥原理,分解质因数)
- HDU 4135 Co-prime (容斥原理+质因数分解)
- hdu 4135 Co-prime(容斥原理)
- hdu 4135 Co-prime(容斥原理)
- HDU 4135 Co-prime (容斥原理, 数学)
- HDU 4135 Co-prime(容斥原理)
- hdu 4135(容斥原理)
- HDU 4135 容斥原理
- hdu 4135 Co-prime(容斥原理)
- hdu 4135 Co-prime(容斥原理)
- hdu 4135 Co-prime(容斥原理)
- hdu 4135(容斥原理)
- HDU 4135 Co-prime(容斥原理)
- hdu 4135 Co-prime 容斥原理
- hdu 4135_Co-prime(容斥原理)
- hdu 4135 容斥原理