zoukankan      html  css  js  c++  java
  • HDU 1796 How many integers can you find 容斥入门

    How many integers can you find

    Problem Description
      Now you get a number N, and a M-integers set, you should find out how many integers which are small than N, that they can divided exactly by any integers in the set. For example, N=12, and M-integer set is {2,3}, so there is another set {2,3,4,6,8,9,10}, all the integers of the set can be divided exactly by 2 or 3. As a result, you just output the number 7.
     
    Input
      There are a lot of cases. For each case, the first line contains two integers N and M. The follow line contains the M integers, and all of them are different from each other. 0<N<2^31,0<M<=10, and the M integer are non-negative and won’t exceed 20.
     
    Output
      For each case, output the number.
     
    Sample Input
    12 2 2 3
     
    Sample Output
    7
     

    题意:

       给你m个数的集合,给你一个n问你小于n并且是这m个数里面的数的倍数有多少

    题解:

       dfs容斥原理

       奇数偶数加减法

    #include<bits/stdc++.h>
    using namespace std;
    const int N = 3e6+20, M = 1e6+10, mod = 1e9+7,inf = 1e9+1;
    
    typedef long long ll;
    
    ll ans;
    int x,a[N],n,m;
    ll gcd(ll a,ll b) {return b==0?a:gcd(b,a%b);}
    void dfs(int i,int num,ll tmp) {
         if(i>=m) {
            if(num==0) ans=0;
            else {
                if(num&1) ans = (ans+n/tmp);
                else ans = ans - n/tmp;
            }
            return ;
         }
         dfs(i+1,num,tmp);
         dfs(i+1,num+1,tmp*a[i]/gcd(tmp,a[i]));
    }
    int main() {
        while(scanf("%d%d",&n,&m)!=EOF) {
            int k = 0;
            n--;
            for(int i=1;i<=m;i++) {
                scanf("%d",&x);
                if(x) a[k++] = x;
            }
            m = k;
            ans = 0;
            dfs(0,0,1);
            printf("%I64d
    ",ans);
        }
        return 0;
    }

     

  • 相关阅读:
    Django之ModelForm组件
    Hibernate的继承映射
    hibernate的检索策略
    Hibernate的多对多映射关系
    Hibernate中的一对一映射关系
    Hibernate中双向的一对多关系
    Hibernate中的映射关系(一对多)
    Hibernate的映射组成关系
    Hibernate的大对象映射
    hibernate的日期映射
  • 原文地址:https://www.cnblogs.com/zxhl/p/5475471.html
Copyright © 2011-2022 走看看