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. Leetcode题库——9.回文数

    @author: ZZQ @software: PyCharm @file: HuiWenShu.py @time: 2018/9/16 16:51 要求:判断一个整数是否是回文数.回文数是指正序(从 ...

  2. 灵悟礼品网上专卖店——画出E-R图

    一.小组成员: 洪雪意(产品负责人) 陈淑筠(Master) 二.组内人员任务情况 计划完成的任务的第三个模块:分析并建立数据库 已完成的任务: 任务的第三个模块: 陈淑筠(完成任务1):画出商品资料 ...

  3. WordCount程序实现

    程序功能: 统计出文件中文本的行数,每行字符数.单词数,文本空行数,文本总字符数.总单词数并显示. 使用方法: 1.在电脑中建立文本

  4. 用虚拟机安装了一台Linux系统,突然想克隆一台服务器,克隆后发现无法上网,如何解决?

    用虚拟机安装了一台Linux系统,突然想克隆一台服务器,克隆后发现无法上网,如何解决? 答:    a.编辑网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth ...

  5. scrapy-继承默认的user-agent 中间件

    class MyUserAgentMiddleware(UserAgentMiddleware): def __init__(self, user_agent): self.user_agent = ...

  6. Nmap用法实例

    <给Linux系统/网络管理员的nmap的29个实用例子> https://linux.cn/article-2561-1.html

  7. vector(char*)和vector(string)

    vector<char*> ch; vector<string> str; for(int i=0;i<5;i++) { char *c=fun1();//通过这个语句产 ...

  8. iphonex适配

    这一篇具体适配步骤比较全面 iphonex适配 这一篇图文讲解比较全面 关于H5页面在iPhoneX适配

  9. 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题

    如果线程在等待时接到通知,但线程等待的条件还不满足,此时,线程接到的就是早期通知,如果条件满足的时间很短,但很快又改变了,而变得不再满足,这时也将发生早期通知.这种现象听起来很奇怪,下面通过一个示例程 ...

  10. QString,string,char* 在utf8和gbk不同编码下的相互转化

    关于编码简介:ascii编码是最开始的编码规则本,里面只收纳了英文.特殊字符.数字等有限字符,采用的是8位一个字节的方式进行编码对照:unicode在ascii码的基础上进行了升级扩展,立志将全世界所 ...