HDU1796 简单容斥

原创 2016年08月30日 09:42:06

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

#include <iostream>
#include<cmath>
#include<memory.h>
#include<algorithm>
long long n,m;
long long zhi[110];
long long he[110];
using namespace std;
long long gcd(long long a,long long b)
{
    if(a==0||b==0)return 0;
    long long tem;
    long long q=a,w=b;
    while(b)         
    {
      tem=a%b;
      a=b;            
      b=tem;
    }
    return q*w/a;
}
void dfs(long long zuobiao,long long ceng,long long zong)
{
    if(ceng>m)return;
    int tem=gcd(zong,zhi[zuobiao]);
    if(tem>n)return ;
    else
    {
        he[ceng]+=(n-1)/tem;
        for(long long a=zuobiao+1;a<=m;a++) dfs(a,ceng+1,tem);
    }
}
int main() 
{
    while(cin>>n>>m)
    {
        memset(zhi,0,sizeof(zhi));
        memset(he,0,sizeof(he));
        long long qq;
        long long o=0;
        for(qq=1;qq<=m;qq++)
        {
            long long k;
            cin>>k;
            if(k!=0)zhi[++o]=k;
        }
        m=o;
        for(long long a=1;a<=m;a++)dfs(a,1,1);
        for(long long a=1;a<=m;a++)if(!(a%2))he[a]=-he[a];
        long long sum=0;
        for(long long a=1;a<=m;a++)sum+=he[a];
        cout<<sum<<endl;
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

2,3,5,7倍数 (离散(集合))

2,3,5,7的倍数 Problem : 1004 Time Limit : 1000ms Memory Limit : 65536K descri...
  • strangedbly
  • strangedbly
  • 2015年04月23日 19:48
  • 1440

线程(进程)的同步与互斥实例

1.有一个队列,线程1负责从网络接收分组,并将收到的分组放到队列尾,然后再次从网络中接收下一个到达的分组,并进行同样的队列操作。线程2从此队列头中取出一个分组进行处理,处理完毕后,再次从队列中取出一个...
  • u014634338
  • u014634338
  • 2015年09月20日 12:28
  • 1216

【专题总结】容斥原理(持续更新)

差强人意的专题总结。
  • TRiddle
  • TRiddle
  • 2016年07月10日 22:53
  • 1379

HDU 1796 How many integers can you find(简单容斥原理)

题目大意:有一个序列,大小为m,里面有m个不超过20的非负数,各不相同。要求在1-n中有多少个能被m个数中任意一个数整除。 题目思路:简单的容斥原理应用。就不说了直接上代码。 有两种方法,一种是D...
  • u013611908
  • u013611908
  • 2015年02月03日 12:20
  • 694

hdu 1796 容斥原理

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1796 How many integers can you find Time Limit: 120...
  • thegoodniao
  • thegoodniao
  • 2014年03月13日 12:58
  • 282

hdu 1796 容斥原理

Problem Description Now you get a number N, and a M-integers set, you should find out how many integ...
  • winycg
  • winycg
  • 2016年04月21日 19:59
  • 267

hdu 1796(容斥原理)

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1796 How many integers can you find Time Limit: 120...
  • liusuangeng
  • liusuangeng
  • 2015年01月29日 21:59
  • 660

Hdu 1796 How many integers can you find (容斥原理 递归及循环的一般写法)

题意:给出n和由m个元素的集合,求小于n且是集合中任意元素的倍数的数有多少个。 把集合中的0先去掉。 #include int data[20],n,m,cnt; __int64 sum; ...
  • whyorwhnt
  • whyorwhnt
  • 2014年03月27日 21:46
  • 653

HDU 1796 How many integers can you find (容斥原理)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1796 题意:给你两个数n(n 分析:先不考虑重叠的部分,把小于n,且能整除a1的数的个数求出来,即(n...
  • w20810
  • w20810
  • 2015年02月21日 18:08
  • 386

HDU 1796 How many integers can you find(容斥原理+二进制/DFS)

求n以内能够被所给的集合中的数整除的数的个数。
  • Noooooorth
  • Noooooorth
  • 2015年08月17日 23:58
  • 1748
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU1796 简单容斥
举报原因:
原因补充:

(最多只允许输入30个字)