容斥原理——uva 10325 The Lottery
2024-10-13 09:13:54
首先推荐一篇介绍容斥原理很好的博客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 ;
}
最新文章
- Android开发学习—— 消息队列
- js 与 jq 的节点添加删除实例
- 《舌尖上的中国》第二季今日首播了,天猫食品也跟着首发,借力使力[bubuko.com]
- 六、GAIA
- 请确认 <;Import>; 声明中的路径正确,且磁盘上存在该文件。
- 如何在 Arch Linux 的终端里设定 WiFi 网络
- 通过宏定义判断是否引入的是framework,反之则使用双引号,实用!
- HDU4836 The Query on the Tree(树状数组&;&;LCA)
- A Full Hardware Guide to Deep Learning
- Centos6.5安装memcached
- Myeclipse中隐藏jar包
- React Native之样式
- php 调用接口
- 查看Chrome密码只需一段代码
- 题解-ZJOI2015地震后的幻想乡
- Unity应用架构设计(2)——使用中介者模式解耦ViewModel之间通信
- sublime text3配置及相关小技巧
- uniGUI试用笔记(九)
- 【Struts2】剖析Struts2中的反射技术 ValueStack(值栈)
- 高效的MySQL分页——利用子查询分页
热门文章
- ExtJS4.2学习(二)Ext统一组件模型——Panel
- [scalability] Find all documents that contain a list of words
- css3属性整理
- tomcat安全设置
- [java]2015上海邀请赛 B Base64
- 去除右键菜单opendlg
- Android 自定义对话框使用静态Handler传递参数
- foreman1.3安装
- Dreamweaver CS6破解教程[序列号+破解补丁]
- VS2010调试 --指南 Reference from : http://blog.csdn.net/kingzone_2008/article/details/8133048