首先推荐一篇介绍容斥原理很好的博客http://www.cppblog.com/vici/archive/2011/09/05/155103.html

题意:求1~n中不能被给定m个数中任意一个数整除的数的个数。

思路:n-sum(能被整除的个数)

明显用容斥原理:如10 - 能被2整除的数的个数 - 能被3整除的数的个数 + 能被6整除的数的个数

20-能被2整除的数的个数-能被4整除的数的个数+能被4整除的数的个数(2,4的最小公倍数)
加上或减去的是(n/某种组合的最小公倍数)
 #include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<memory.h>
#include<cstdlib>
#include<vector>
#define LL long long int
using namespace std;
const int MAXN=;
const double eps=1e-;
const int inf=0x3f3f3f3f; int n,m;
long long p[];
long long gcd(long long a,long long b)
{
return b ? gcd(b,a%b):a;
}
long long lcm(long long a,long long b)
{
long long tmp=gcd(a,b);
return a/tmp*b;
} int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i=;i<m;i++)
{
scanf("%lld",&p[i]);
}
int sum=;
for(int i=;i<(<<m);i++)
{
LL mult=;
int ones=;
for(int j=;j<m;j++)
{
if(i&(<<j))
{
mult=lcm(mult,p[j]);
if(mult>n)
break;
ones++;
}
}
if(mult>n)
continue;
if(ones%)
sum+=n/mult;
else
sum-=n/mult;
}
printf("%d\n",n-sum);
}
return ;
}

 

最新文章

  1. Android开发学习—— 消息队列
  2. js 与 jq 的节点添加删除实例
  3. 《舌尖上的中国》第二季今日首播了,天猫食品也跟着首发,借力使力[bubuko.com]
  4. 六、GAIA
  5. 请确认 &lt;Import&gt; 声明中的路径正确,且磁盘上存在该文件。
  6. 如何在 Arch Linux 的终端里设定 WiFi 网络
  7. 通过宏定义判断是否引入的是framework,反之则使用双引号,实用!
  8. HDU4836 The Query on the Tree(树状数组&amp;&amp;LCA)
  9. A Full Hardware Guide to Deep Learning
  10. Centos6.5安装memcached
  11. Myeclipse中隐藏jar包
  12. React Native之样式
  13. php 调用接口
  14. 查看Chrome密码只需一段代码
  15. 题解-ZJOI2015地震后的幻想乡
  16. Unity应用架构设计(2)——使用中介者模式解耦ViewModel之间通信
  17. sublime text3配置及相关小技巧
  18. uniGUI试用笔记(九)
  19. 【Struts2】剖析Struts2中的反射技术 ValueStack(值栈)
  20. 高效的MySQL分页——利用子查询分页

热门文章

  1. ExtJS4.2学习(二)Ext统一组件模型——Panel
  2. [scalability] Find all documents that contain a list of words
  3. css3属性整理
  4. tomcat安全设置
  5. [java]2015上海邀请赛 B Base64
  6. 去除右键菜单opendlg
  7. Android 自定义对话框使用静态Handler传递参数
  8. foreman1.3安装
  9. Dreamweaver CS6破解教程[序列号+破解补丁]
  10. VS2010调试 --指南 Reference from : http://blog.csdn.net/kingzone_2008/article/details/8133048