题目链接:

http://acm.hdu.edu.cn/showproblem.php?

pid=1796

题目大意:

给你一个整数N。和M个整数的集合{A1、A2、…、Am}。集合内元素为非负数(包括零),求小于N的

正整数(1~N-1)中,能被M个整数的集合中随意一个元素整除的正整数个数。

比如N = 12。M = {2,3},在1~N-1中,能被2整除的数为{2,4,6。8。10},能被3整除的数为

{3。6,9}。则所求集合为{2,3,4。6,8,9,10},共7个,则答案为7。

思路:

就是求M个集合的并集。先看上边的样例。能被2整除的数集合S1为{2,4,6,8。10},能被3整除的数

集合S2为{3,6。9}。而两者交集S12为能被LCM(2,3) = 6整除的数为{6}。

则两者并集 S = S1 + S2 - S12。

依据容斥定理得:若有M个数,则可求出1~N-1中能被不同组合的公倍数整除的个数。

1~N-1能被公倍数整除的个数为  (N-1) / LCM。然后依据奇数项加,偶数项减的原则得出答案个数。

AC代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
using namespace std; int Gcd(int a,int b)
{
if(a < b)
int temp = a, a = b, b = temp;
if(b == 0)
return a;
return Gcd(b,a%b);
} int Lcm(int a,int b)
{
return a/Gcd(a,b)*b;
} int N,M;
int A[220],Select[220]; int Solve()
{
int ans = 0;
for(int i = 1; i < (1 << M); ++i)
{
int odd = 0;
for(int j = 0; j < M; ++j)
{
if((1<<j) & i)
{
Select[++odd] = j;
}
}
int LCM = 1;
for(int j = 1; j <= odd; ++j)
LCM = Lcm(LCM,A[Select[j]]);
if(odd & 1)
ans += N/LCM;
else
ans -= N/LCM;
}
return ans;
} int main()
{
int d;
while(~scanf("%d%d",&N,&M))
{
for(int i = 0; i < M; ++i)
{
scanf("%d",&d);
if(d)
A[i] = d;
else
i--,M--;
}
N--;
printf("%d\n",Solve());
} return 0;
}

HDU1796 How many integers can you find【容斥定理】的更多相关文章

  1. hdu 1796 How many integers can you find 容斥定理

    How many integers can you find Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  2. HDU 1796How many integers can you find(简单容斥定理)

    How many integers can you find Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  3. Codeforces Round #330 (Div. 2) B. Pasha and Phone 容斥定理

    B. Pasha and Phone Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/595/pr ...

  4. How Many Sets I(容斥定理)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3556 How Many Sets I Time Limit: 2 ...

  5. HDU 1695 GCD 欧拉函数+容斥定理 || 莫比乌斯反演

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  6. HDU 4135 Co-prime 欧拉+容斥定理

    Co-prime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  7. HDU 1695 GCD(容斥定理)

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  8. TOJ 4008 The Leaf Eaters(容斥定理)

    Description As we all know caterpillars love to eat leaves. Usually, a caterpillar sits on leaf, eat ...

  9. HDU5768Lucky7(中国剩余定理+容斥定理)(区间个数统计)

    When ?? was born, seven crows flew in and stopped beside him. In its childhood, ?? had been unfortun ...

随机推荐

  1. hpuoj--校赛--2015年的第一场雪(暴力)

    问题 D: 感恩节KK专场--2015年的第一场雪 时间限制: 1 Sec  内存限制: 128 MB 提交: 865  解决: 76 [提交][状态][讨论版] 题目描述 下雪了,KK学长站在三教门 ...

  2. hpuoj--校赛--特殊的比赛日期(素数判断+模拟)

    问题 B: 感恩节KK专场--特殊的比赛日期 时间限制: 1 Sec  内存限制: 128 MB 提交: 392  解决: 99 [提交][状态][讨论版] 题目描述 KK今天参加河南理工大学ACM程 ...

  3. Windows安装PHP MongoDB扩展

    本文将讲述一下在Wamp环境下安装MongoDB扩展的过程,大家可以略作参考 Linux 版本的可以参考之前发布的Linux安装PHP MongoDB扩展 安装环境 系统环境:Windows 7 64 ...

  4. AngularJs轻松入门(六)表单校验

    表单数据的校验对于提高WEB安全性意义不大,因为服务器接收到的请求不一定来自我们的前端页面,有可能来自别的站点,黑客可以自己做一个表单,把数据提交到我们的服务器(即跨站伪造请求),这样就绕过了前端页面 ...

  5. 002.ES2015和ES2016新特性--箭头函数.md

    1. ES2015中的箭头函数 JavaScript有一级函数的特性,也就是说,函数像其他值一样可以当成参数传来传去. var result = [1,2,3].reduce(function(tot ...

  6. sql点滴

    http://www.cnblogs.com/tylerdonet/p/5509398.html

  7. Linux Shell脚本编程-函数

    函数介绍  定义:把一段独立功能的的代码当做一个整体,并为之一个名字,命名的代码段,此即为函数:  功能:函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程.  注意: ...

  8. Get,Post和Head具体解释

    HTTP请求最经常使用的三个方法: (1)Get方法. 取回请求URL标志的不论什么信息,在浏览器的地址栏中输入网址的方式訪问网页时,浏览器採用GET方法向server获取资源. (2)Post方法. ...

  9. Java 反射经常用法演示样例

    <pre name="code" class="java">import java.lang.reflect.Constructor; import ...

  10. Linux安全应用之防垃圾邮件服务器的构建

    Linux安全应用之防垃圾邮件服务器的构建 一.垃圾邮件产生的原因 垃圾邮件(SPAM) 也称作UCE(Unsoticited Commercial Email.未经许可的商业电子邮件)或UBE(Un ...