算法笔记--容斥原理应用

Posted Wisdom+.+

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法笔记--容斥原理应用相关的知识,希望对你有一定的参考价值。

1.求1--r中与n互质的数的个数

位运算版:

ll count(ll n,ll r){
    p.clear();
    for(ll i=2;i*i<=n;i++){
        if(n%i==0){
            p.pb(i);
            while(n%i==0)n/=i;
        }
    }
    if(n>1)p.pb(n);
    ll ans=0;
    for(int i=1;i<(1<<p.size());i++){
        ll mask=1,cnt=0;
        for(int j=0;j<p.size();j++){
            if(i&(1<<j)){
                mask*=p[j];
                cnt++;
            }
        }
        if(cnt&1)ans+=r/mask;
        else ans-=r/mask;
    }
    return r-ans;
}

dfs版:

注意容斥和上面的相反,t==0的时候加了r,所以可以直接出结果

vector<int>p;
ll ans=0;
void dfs(int k,int cnt,ll s,ll r){
    if(k==p.size()){
        if(cnt&1)ans-=r/s;
        else ans+=r/s;
        return ; 
    }
    dfs(k+1,cnt,s,r);
    dfs(k+1,cnt+1,s*p[k],r);
}
ll count(ll n,ll r){
    p.clear();
    for(ll i=2;i*i<=n;i++){
        if(n%i==0){
            p.pb(i);
            while(n%i==0)n/=i;
        }
    }
    if(n>1)p.pb(n);
    ans=0;
    dfs(0,0,1,r);
    return ans;
}

 

以上是关于算法笔记--容斥原理应用的主要内容,如果未能解决你的问题,请参考以下文章

AcWing 算法基础课 容斥原理Nim游戏

《算法零基础100例》(第16例) 容斥原理

专题计数问题(排列组合,容斥原理,卡特兰数)

组合数学及其应用——容斥原理

第46题容斥原理 的应用(更新中)

poj1091 容斥原理的应用