如果一个数字仅由6或者8构成,那么这个数字是幸运数字;如果一个数字是幸运数字的倍数,那么就是近似的幸运数。

给定区间,求有多少个近似幸运数字位于这个区间之内。

典型的容斥原理。

首先,弄出所有的幸运数字,把那些本来就是另外幸运数字的倍数的幸运数字去掉(因为它肯定可以通过前面小的数字统计到)

f[n]=sigama( n/a1+n/a2+....-n/lcm(ai,aj)...+n/lcm(ai,aj,ak)....... )

这已经很明显了。

不过注意统计的时候也有一些技巧可言。首先对于一个数字,我们判断它对应的最大的a[]是那个。然后从那个数开始往前拼凑,一遍拼凑一遍统计答案即可。

因为大数lcm很容易就超过了n的大小,可以及时剪掉。

注意,中间gcd会爆longlong,所以lcm的时候稍微注意一下。

召唤代码君;

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
typedef long long ll;
using namespace std; const ll lim=10000000000LL;
ll f[],n=,N; void init(ll x)
{
if (x>lim) return ;
if (x) f[++n]=x;
init(x*+),init(x*+);
} ll gcd(ll A,ll B)
{
return B==?A:gcd(B,A%B);
} void _init()
{
init();
sort(f+,f++n);
for (int i=; i<=n; i++)
for (int j=; j<i; j++)
if (f[j] && f[i]%f[j]==)
{
f[i]=;
break;
}
N=;
for (int i=; i<=n; i++)
if (f[i]) f[++N]=f[i];
n=N;
} ll dfs1(ll pos,bool flag,ll sum,ll x)
{
if (pos<=) return ;
ll ans=;
ans+=dfs1(pos-,flag,sum,x);
ll g=gcd(sum,f[pos]);
if (sum/g <= x/f[pos])
{
g=sum/g*f[pos];
if (flag) ans-=x/g;
else ans+=x/g;
ans+=dfs1(pos-,!flag,g,x);
}
return ans;
} ll count(ll x)
{
int pos=;
while (pos<=n && f[pos]<=x) pos++;
ll ans=dfs1(pos-,false,,x);
return ans;
} int main()
{
_init();
ll A,B;
while (cin>>A>>B)
cout<<count(B)-count(A-)<<endl;
return ;
}

BZOJ1853_幸运数字的更多相关文章

  1. BZOJ 1853 【Scoi2010】 幸运数字

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

  2. BZOJ 4568 幸运数字

    题目传送门 4568: [Scoi2016]幸运数字 Time Limit: 60 Sec Memory Limit: 256 MB Description A 国共有 n 座城市,这些城市由 n-1 ...

  3. BZOJ 1853: [Scoi2010]幸运数字

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

  4. 【BZOJ-4568】幸运数字 树链剖分 + 线性基合并

    4568: [Scoi2016]幸运数字 Time Limit: 60 Sec  Memory Limit: 256 MBSubmit: 238  Solved: 113[Submit][Status ...

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

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

  6. BZOJ1853 [Scoi2010]幸运数字

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

  7. 【bzoj1853】 Scoi2010—幸运数字

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

  8. 幸运数字(number)

    幸运数字(number) Time Limit:1000ms   Memory Limit:64MB [题目描述] LYK最近运气很差,例如在NOIP初赛中仅仅考了90分,刚刚卡进复赛,于是它决定使用 ...

  9. Bzoj 1853: [Scoi2010]幸运数字 容斥原理,深搜

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

随机推荐

  1. HTML3/CSS基础

    1. HTML 1.1 什么是HTML HTML是用来制作网页的标记语言 HTML是Hypertext Markup Language的英文缩写,即超文本标记语言 HTML语言是一种标记语言,不需要编 ...

  2. Tomcat 下载与安装

    下载地址:http://tomcat.apache.org 根据自己电脑的系统下载Core节点下不同的版本.   Tomcat文件目录结构 bin:存放启动与关闭Tomcat的脚本文件 conf:存放 ...

  3. Zabbix实战-简易教程--日志类

    一.主动模式和被动模式介绍 要监控日志,必须使用主动模式,那么,什么是主动模式?什么是被动模式呢? 1.主动模式和被动模式 主动模式 主动模式通讯过程: ● Agent打开TCP连接(主动检测变成Ag ...

  4. C#_Switch语句的内部实现

    Switch的C#内部实现 https://www.cnblogs.com/Interkey/p/3730432.html 在IL汇编语言中的Switch指令 -- 按照标号来进行跳转(和goto语句 ...

  5. JDK 和 JRE 有什么区别

    JDK是Java开发工具包(Java Development Kit),JRE是Java运行环境(Java Runtime Environment),JDK包含了JRE,搭建Java环境的时候,安装J ...

  6. Linux系统初探过程总结

    Linux系统初探的过程大约用了一周的时间,这周基本将Linux系统安装,PostgreSQL安装,Nginx服务器安装,ASP.NET Core应用部署都走了一遍.由于以前没有怎么接触和使用过Lin ...

  7. First Day!

    刚申请博客第一天,多多关照! 小弟,给各位大佬递茶! 出现什么错误, 还请明确指出! 现在, 正在找工作, 如果有老哥, 公司缺人, 何不让老弟我去试试! 不入前端, 不知水深. 一入前端, 如入泥潭 ...

  8. ftp部署及使用

    常用软件安装及使用目录 http://www.jb51.net/article/106604.htm   ftp部署 本篇文章主要介绍了CentOS7.0下安装FTP服务的方法,小编觉得挺不错的,现在 ...

  9. [salt] jinja模板中变量使用pillar的几种方法

    先转载下jinja模板中使用变量的方法,后文主要讲解pillar的变量使用方法 一.jinja模版的使用方法: 1.file状态使用template参数 - template:jinja 2.模版文件 ...

  10. 常用DB2命令

    建库 db2 territory CN on 建库到指定位置 db2 create database OADB on D: using codeset GBK territory CN 列出所有数据库 ...