513. 八

http://www.cogs.pro/cogs/problem/problem.php?pid=513

★☆   输入文件:eight.in   输出文件:eight.out   简单对比
时间限制:1 s   内存限制:128 MB

【问题描述】

八是个很有趣的数字啊。八=发,八八=爸爸,88=拜拜。当然最有趣的还是8用二进制表示是1000。怎么样,有趣吧。当然题目和这些都没有关系。 
某个人很无聊,他想找出[a,b]中能被8整除却不能被其他一些数整除的数。

【输入文件】

第一行一个数n,代表不能被整除的数的个数。第二行n个数,中间用空格隔开。第三行两个数a,b,中间一个空格。

【输出文件】

一个整数,为[a,b]间能被8整除却不能被那n个数整除的数的个数。

【样例输入】 
eight.in

3
7764 6082 462
2166 53442
【样例输出】

eight.out 
6378

【数据规模】 
对于30%的数据, 1≤n≤5,1≤a≤b≤100000。 
对于100%的数据,1≤n≤15,1≤a≤b≤10^9,N个数全都小于等于10^4大于等于1。

容斥原理

全集Z=能被8整除的数

性质p1为能被n1整除,p2为不能被8整除,能被n2整除……

ans=Z中不包含任意性质p的数

这些数都有一个前提:在Z中,所以最小公倍数初值为8

dfs过程中遇到的障碍:

求好几个数的lcm时,

没有必要for枚举几个数,在枚举哪几个数

容斥原理所有项的加加减减都是集合的所有子集

所以dfs时只需分这个数加不加入这个子集即可

这样计算n个数的lcm时,还可利用计算的n-1个数的lcm结果

递归式写法:

#include<cstdio>
using namespace std;
int n,ans;
long long a,b,f[];
int cal(long long m)
{
return b/m-(a-)/m;
}
long long gcd(long long x,long long y)
{
return y ? gcd(y,x%y):x;
}
long long lcm(long long x,long long y)
{
return x*y/gcd(x,y);
}
void dfs(int now,long long num,int sum)
{
if(now==n+)
{
int s=cal(num);
if(sum%) ans-=s;
else ans+=s;
return;
}
long long next=lcm(num,f[now]);
dfs(now+,next,sum+);
dfs(now+,num,sum);
}
int main()
{
freopen("eight.in","r",stdin);
freopen("eight.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%lld",&f[i]);
scanf("%lld%lld",&a,&b);
dfs(,,);
printf("%d",ans);
}

非递归写法:

利用二进制生成子集

#include<cstdio>
using namespace std;
int n,ans;
long long a,b,f[];
int cal(long long m)
{
return b/m-(a-)/m;
}
long long gcd(long long x,long long y)
{
return y ? gcd(y,x%y):x;
}
long long lcm(long long x,long long y)
{
return x*y/gcd(x,y);
}
int main()
{
freopen("eight.in","r",stdin);
freopen("eight.out","w",stdout);
scanf("%d",&n);
for(int i=;i<n;i++) scanf("%lld",&f[i]);
scanf("%lld%lld",&a,&b);
int sum=<<n,cnt;
ans=b/-(a-)/;
long long lcmm;
for(int i=;i<sum;i++)
{
cnt=;lcmm=;
for(int j=;j<n;j++)
if(i&(<<j)) lcmm=lcm(lcmm,f[j]),cnt++;
if(cnt&) ans-=b/lcmm-(a-)/lcmm;
else ans+=b/lcmm-(a-)/lcmm;
}
printf("%d",ans);
}

COGS 513 八的更多相关文章

  1. Cogs 513. 八(容斥原理)

    八 ★☆ 输入文件:eight.in 输出文件:eight.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 八是个很有趣的数字啊.八=发,八八=爸爸,88=拜拜.当然最有趣的 ...

  2. Cogs 1714. [POJ1741][男人八题]树上的点对(点分治)

    [POJ1741][男人八题]树上的点对 ★★★ 输入文件:poj1741_tree.in 输出文件:poj1741_tree.out 简单对比 时间限制:1 s 内存限制:256 MB [题目描述] ...

  3. COGS 2111. [NOIP2015普及]扫雷游戏

    ★   输入文件:2015mine.in   输出文件:2015mine.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 扫雷游戏是一款十分经典的单机小游戏.在 n 行 ...

  4. 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成

    阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...

  5. iOS可视化动态绘制八种排序过程

    前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...

  6. 我的MYSQL学习心得(八) 插入 更新 删除

    我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...

  7. Mina、Netty、Twisted一起学(八):HTTP服务器

    HTTP协议应该是目前使用最多的应用层协议了,用浏览器打开一个网站就是使用HTTP协议进行数据传输. HTTP协议也是基于TCP协议,所以也有服务器和客户端.HTTP客户端一般是浏览器,当然还有可能是 ...

  8. CRL快速开发框架系列教程八(使用CRL.Package)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  9. 【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)

    Oracle 11G RAC数据库安装(八) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总 ...

随机推荐

  1. HDU 3811 Permutation 状压dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3811 Permutation Time Limit: 6000/3000 MS (Java/Othe ...

  2. Team饭来了团队作业3需求改进与系统设计

    团队名称:饭来了 人员组成: 队长:侯晓东          学号:2016012087 队员:崔啸寒          学号:2016012006 队员:方柱权          学号:201601 ...

  3. 《软件工程和Python》PYTHON效能分析和Django

    资料汇总网站:http://www.yzhiliao.com/my/course/55 一..作业下面两个题目任选一题: (1)运用jieba库分词(或者你喜欢的其他库),并把代码发到git上去(不发 ...

  4. Weka平台学习

    链接:http://www.cs.waikato.ac.nz/ml/weka/index.html 一简介: WEKA的全名是怀卡托智能分析环境(Waikato Environment for Kno ...

  5. 运行时错误 429,ACTIVEX部件不能创建对象的解决方法小结

    错误描述: 发布在IIS上面的网站运行时出现如下错误: Microsoft VBscrīpt 运行时错误 错误 '800a01ad' ActiveX 部件不能创建对象 这个错误是asp组件未注册,而导 ...

  6. CASE (Transact-SQL)

    A. 使用带有 CASE 简单表达式的 SELECT 语句Using a SELECT statement with a simple CASE expression在 SELECT 语句中,CASE ...

  7. [官网]SQLSERVER ON linux 的最低要求 以及安装方法

    快速入门:在 Red Hat 上安装 SQL Server 并创建数据库 总体说明: 适用于: SQL Server (仅限 Linux)Azure SQL 数据库Azure SQL 数据仓库并行数据 ...

  8. [转贴]systemd 编写服务管理脚本

    [转贴]sparkdev大神的博客, 关于 systemd的配置文件的 介绍, 自己之前二进制安装 k8s 时 超过一个 service文件 但是当时不明不白的. 现在再学习一下大神的文章 的确牛B ...

  9. 基于element-ui的后台系统表格、dialog、筛选、自定义按钮、分页的一次性封装

    方便基础业务开发封装的一套组件,基于vue2.5.x和element-ui,可以通过配置自动生成表格展示,表格新增.编辑功能.分页.筛选项.自定义显示表格数据等功能. 先上演示图片 --------- ...

  10. Cure HDU - 5879(预处理+技巧)

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