题意

称只含有 6 和 8 的数字为幸运数字。称幸运数字的倍数为类幸运数字。求 \([l,r]\) 中有多少个类幸运数字。\(1\le l,r\le 10^{10}\) 。

分析

幸运数字最多有 \(2^{11}-2\) 个,先全部找出来,有倍数关系的留下最小的那个。容斥显然,关键是怎么写。

暴力dfs最小公倍数。

两个优化。第一,如果当前的最小公倍数已经大于 \(r\) 那么就退出。第二,所有幸运数字从大到小排序,这样不合法情况不用到最后才退出,大大降低时间。

复杂度:\(O(2^len(r)+不知道)\) 。

代码

以后写暴力要把不合法的条件在递归进去之前判掉。

最小公倍数会爆 long long ,所以需要用double来跟 \(r\) 比较。

#include<bits/stdc++.h>
using namespace std;
typedef long long giant;
const int maxl=2100;
giant l,r,b[maxl],a[maxl],ans=0;
bool no[maxl];
int m=0,n=0;
giant gcd(giant x,giant y) {
return y?gcd(y,x%y):x;
}
void calc(int now,giant x,bool f) {
if (now>n) {
giant tmp=r/x-(l-1)/x;
if (x!=1) ans+=(f?tmp:-tmp);
return;
}
calc(now+1,x,f);
giant tmp=(x/gcd(a[now],x));
if ((double)tmp*a[now]<=r) calc(now+1,tmp*a[now],f^true);
}
void get(giant now) {
if (now>r) return;
if (now) b[++m]=now;
get(now*10+6);
get(now*10+8);
}
int main() {
#ifndef ONLINE_JUDGE
freopen("test.in","r",stdin);
#endif
cin>>l>>r;
get(0);
sort(b+1,b+m+1);
for (int i=1;i<=m;++i) if (!no[i]) {
a[++n]=b[i];
for (int j=i+1;j<=m;++j) if (b[j]%b[i]==0) no[j]=true;
}
reverse(a+1,a+n+1);
calc(1,1,false);
cout<<ans<<endl;
return 0;
}

bzoj1853-大包子的幸运数字的更多相关文章

  1. 【BZOJ1853/2393】[Scoi2010]幸运数字/Cirno的完美算数教室 DFS+容斥

    [BZOJ1853][Scoi2010]幸运数字 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那 ...

  2. 【bzoj1853】 Scoi2010—幸运数字

    http://www.lydsy.com/JudgeOnline/problem.php?id=1853 (题目链接) 今天考试考了容斥,结果空知道结论却不会写→_→ 题意 求区间中不含6,8两个数字 ...

  3. BZOJ1853 [Scoi2010]幸运数字 容斥原理

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1853 题意概括 求一个区间范围内,近似幸运数字的个数. 定义: 幸运数字:仅由6或者8组成的数字. ...

  4. 【BZOJ1853】幸运数字(搜索,容斥)

    [BZOJ1853]幸运数字(搜索,容斥) 题面 BZOJ 洛谷 题解 成功轰下洛谷rk1,甚至超越了一个打表选手 这题思路很明显吧,先搞出来所有范围内的合法数字,然后直接容斥, 容斥的话显然没有别的 ...

  5. 【bzoj1853】: [Scoi2010]幸运数字 数论-容斥原理

    [bzoj1853]: [Scoi2010]幸运数字 预处理出所有幸运数字然后容斥原理 但是幸运数字是2logn个数的 直接搞会炸 所以把成倍数的处理掉 然后发现还是会T 所以数字要从大到小处理会快很 ...

  6. 【BZOJ-1853&2393】幸运数字&Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 1817  Solved: 665[Submit][Status] ...

  7. BZOJ1853 [Scoi2010]幸运数字

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  8. 2019.01.17 bzoj1853: [Scoi2010]幸运数字(容斥+dfs)

    传送门 搜索菜题,然而第一次没有注意然后爆longlonglong longlonglong了. 题意:称所有数位由6,86,86,8组成的数为幸运数字,问一个一个区间[l,r][l,r][l,r]中 ...

  9. BZOJ1853 Scoi2010 幸运数字 【枚举+容斥】

    BZOJ1853 Scoi2010 幸运数字 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号 ...

随机推荐

  1. 微服务(SOP)日志管理

    问题: 大型企业应用规模大,调试 / 解决问题由于在生产环境中不会有开发环境的调试工具,如果需要模拟还原当时的环境, 目前的解决办法是进行日志记录 日志记录的常用方式: 使用SpringAop进行切入 ...

  2. ES6 localStorage 类库

    无意中看到的,记录下. 用到了es6语法.支持在js中写构造函数 class CovLocalDB { constructor (name) { this.LS = null this.name = ...

  3. NB-IOT模组指令AT+NMSTATUS和AT+CGPADDR对比

    1. AT+NMSTATUS,这个指令是用来查询模块在IOT平台的注册情况.注册指的是lwm2m协议里面的注册机制,详细可以参考lwm2m协议. 2. AT+MREGSWT,设置重启之后,自动启动注册 ...

  4. 使用SCSS扩展Bootstrap4

    摘要 因为打算写一个小网站,而个人时间又不是那么充裕,所以没有选择前后端分离的架构. 对于非前后端分离应用来说,Bootstrap应该是目前的最佳前端框架之一了. 而Bootstrap4,是Boots ...

  5. Maven学习(六)-----Maven仓库的详细介绍

    Maven仓库的详细介绍 在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件.Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库.(仓库就是存放依 ...

  6. HTML5 + CSS3 实现地球绕太阳公转

    使用的是正面视角,主要是用 HTML5 + CSS3 来实现,JS只是用来画图. test.html: <!DOCTYPE html> <html> <head> ...

  7. Ubuntu 安装python后,安装python-dev

    1.通常情况下: sudo apt install python-dev 或者 在 sudo apt install python 命令下安装应该也附带了 python-dev 上述 pyhthon ...

  8. Unity Lighting - Choosing a Color Space 选择色彩空间(四)

      Choosing a Color Space 选择色彩空间 In addition to selecting a rendering path, it’s important to choose ...

  9. 使用Mininet创建网络拓扑

    使用Mininet创建Topo Python脚本实现创建拓扑 #coding:utf-8 from mininet.net import Mininet from mininet.topo impor ...

  10. CF 1008B Turn the Rectangles(水题+贪心)

    There are n rectangles in a row. You can either turn each rectangle by 90 degrees or leave it as it ...