Description

在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”!但是这种“幸运号码”总是太少了,比如在[1,100]的区间内就只有6个(6,8,66,68,86,88),于是他又定义了一种“近似幸运号码”。lxhgww规定,凡是“幸运号码”的倍数都是“近似幸运号码”,当然,任何的“幸运号码”也都是“近似幸运号码”,比如12,16,666都是“近似幸运号码”。 现在lxhgww想知道在一段闭区间[a, b]内,“近似幸运号码”的个数。

Input

输入数据是一行,包括2个数字a和b

Output

输出数据是一行,包括1个数字,表示在闭区间[a, b]内“近似幸运号码”的个数

Sample Input

【样例输入1】

1 10

【样例输入2】

1234 4321

Sample Output

【样例输出1】

2

【样例输出2】

809

HINT

【数据范围】

对于30%的数据,保证1 < =a < =b < =1000000

对于100%的数据,保证1 < =a < =b < =10000000000

Sol

这题刚看上去似乎是个数位dp...不过是假的...

首先幸运数字只有\(2^{11}\)个,我们可以暴力找到它们,然后暴力去掉倍数。

然后我们考虑近似幸运号码,我们发现如果把每个幸运数字的倍数都标记的话,每个数字的标记次数好像是和组成lcm的幸运数字个数有关的(说白了就是容斥),所以我们每次取几个幸运数字,求lcm,然后大力按照选择数字的个数判断系数容斥一波,算区间某个数的倍数出现次数当然是直接用\(((r/x)-((l-1)/x))\)算啦。

到这里这道题好像就完了......但是dfs的时候注意一下,lcm好像是会爆long long的,我们用long double判断某个数字有没有越界,越界了就不搜这个数字了。

还有,一定要倒着搜,这样的话状态少!!!否则会TLE!!!

时间复杂度\(能过O(能过)\)。

Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll l,r,n,vis[10005],a[10005],tot=-1,ans;
void get(ll x){if(x>r) return;a[++tot]=x;get(x*10+6);get(x*10+8);}
void dfs(int now,int cnt,ll x)
{
if(now>n){if(!cnt) return;ans+=((cnt&1)?1:-1)*((r/x)-((l-1)/x));return;}
dfs(now+1,cnt,x);
ll tmp=x/__gcd(a[now],x);
if((long double)tmp*a[now]<=r) dfs(now+1,cnt+1,tmp*a[now]);
}
int main()
{
scanf("%lld%lld",&l,&r);get(0);sort(a+1,a+tot+1);
for(int i=1;i<=tot;i++) for(int j=i+1;j<=tot;j++) if(a[j]%a[i]==0) vis[j]=1;
for(int i=1;i<=tot;i++) if(!vis[i]) a[++n]=a[i];
for(int i=1,j=n;i<j;i++,j--) swap(a[i],a[j]);
dfs(1,0,1);printf("%lld\n",ans);
}

最新文章

  1. 【.net 深呼吸】使用二进制格式来压缩XML文档
  2. UICollectionLayout布局 —— UIKit之学习UICollectionView记录二《流水布局》
  3. guava学习--Objects
  4. 如何在CentOS 6.5上安装EPEL 源
  5. android 开发中的常见问题
  6. 管道寄售库存MRKO结算后,冲销问题
  7. acess the C\c++ from the Java
  8. SQL Server 2012 数据库备份
  9. STM32F4_TIM输出PWM波形(可调频率、占空比)
  10. eclipse java.lang.OutOfMemoryError: Java heap space
  11. 【Codeforces Round#279 Div.2】B. Queue
  12. automation studio 6.0 破解版 32位
  13. c#里listview里如何获取点击的是哪一列
  14. ip forward
  15. PhiloGL学习(5)——神说要有光,便有了光
  16. “核弹级”Android漏洞Janus,黑客可以任意篡改App
  17. spring-cloud-config安全问题
  18. bs4模块
  19. java 变量及数据类型、原码、反码、补码
  20. Android Studio配置Android Annotations框架详解--说说那些坑

热门文章

  1. Python可执行对象——exec、eval、compile
  2. 可重复使用Tab切换代码和纯js代码
  3. 12-EasyNetQ之消息版本控制
  4. 通过class类获取类的成员变量和构造函数信息
  5. eclipse egit(分支管理 上)
  6. php 实现百度文库搭建
  7. LoadRunner 关联和集合点、检查点
  8. ubuntu 12.04下搭建web服务器(MySQL+PHP+Apache) 教程
  9. 496. Next Greater Element I 另一个数组中对应的更大元素
  10. boost 错误报告