zoukankan      html  css  js  c++  java
  • hdu 1796

    一下午 终于行了

    基本的容斥定理

    收藏
    2314

    容斥原理
    编辑

    在计数时,必须注意无一重复,无一遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。

    1公式编辑

    也可表示为
    设S为有限集,
    ,则

    #include<iostream>

    int a[12];
    __int64 n;
    __int64 sum;
    int m;
    __int64 gcd(__int64 x,__int64 y)
    {
        __int64 t;
        if(x<y)
        {
            t=x;
            x=y;
            y=t;
        }
        while(y)
        {
            t=x%y;
            x=y;
            y=t;
        }
        return x;
    }
    void dfs(int j,__int64 lcm,int num)
    {
        if(num>m) return ;
        lcm=lcm*a[j]/gcd(lcm,a[j]);
        if(num%2==0) sum-=(n-1)/lcm;
        else sum+=(n-1)/lcm;
        for(int i=j+1;i<m;i++)
            dfs(i,lcm,num+1);
    }
    int main()
    {
        while(scanf("%I64d%d",&n,&m)!=EOF)
        {
            for(int i=0;i<m;i++)
            {
                scanf("%d",&a[i]);
                if(a[i]==0)
                    i--,m--;
            }
            sum=0;
            for(i=0;i<m;i++)
                dfs(i,a[i],1);
            printf("%I64d ",sum);
        }
        return 0;
    }
  • 相关阅读:
    将博客搬至CSDN
    JDBC
    Java刷题常用API
    Java的反射机制
    Java的IO流
    Docker原理:Cgroup
    Docker原理:Namespace
    Anaconda软件安装使用问题
    初步了解Unix系统的I/O模式
    深入理解索引和AVL树、B-树、B+树的关系
  • 原文地址:https://www.cnblogs.com/zhangdashuai/p/3702153.html
Copyright © 2011-2022 走看看