zoukankan      html  css  js  c++  java
  • HDU 4135

    容斥原理简单应用

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #define LL __int64
    #define Np 100000
    using namespace std;
    
    bool isprime[Np];
    LL prime[Np],np;
    LL fac[100],fp;
    
    void initial(){
    	np=0;
    	memset(isprime,true,sizeof(isprime));
    	for(LL i=2;i<Np;i++){
    		if(isprime[i]){
    			prime[np++]=(LL)i;
    			for(LL j=i*i;j<Np;j+=i)
    			isprime[j]=false;
    		}
    	}
    }
    
    void dfs(LL i,LL num, LL p,LL s,LL &ans,LL n){
    	if(i>=n){
    		if(num==0){
    			ans=s;
    		}
    		else if(num&1){
    			ans-=s/p;
    		}
    		else ans+=s/p;
    		return ;
    	}
    	dfs(i+1,num,p,s,ans,n);
    	dfs(i+1,num+1,p*fac[i],s,ans,n);
    }
    
    LL  work(LL a,LL b,LL n){
    	LL p=n;
    	fp=0;
    	for(LL i=0;i<np&&prime[i]*prime[i]<=p;i++){
    		if(p%prime[i]==0){
    			fac[fp++]=prime[i];
    			while(p%prime[i]==0)
    			p/=prime[i];
    		}
    	}
    	if(p>1) fac[fp++]=p;
    	
    	LL ansA,ansB;
    	ansA=ansB=0;
    	
    	dfs(0,0,1,a-1,ansA,fp);
    	dfs(0,0,1,b,ansB,fp);
    	
    	return ansB-ansA;
    }
    
    int main(){
    	int T,kase=0; 
    	LL a,b,n;
    	initial();
    	scanf("%d",&T);
    	while(T--){
    		scanf("%I64d%I64d%I64d",&a,&b,&n);
    		LL ans=work(a,b,n);
    		printf("Case #%d: %I64d
    ",++kase,ans);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    git
    composer
    laravel saas
    算法模板-01背包
    GMP-C/C++(大数库)使用方法
    算法模板-容斥原理
    算法模板-欧拉函数
    算法模板-素数判断/素数筛法
    算法模板-质因数分解
    算法模板-快速幂取模
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/4004068.html
Copyright © 2011-2022 走看看