Description

A lucky number is a number whose decimal representation contains only the digits \(4\) and \(7\). An almost lucky number is a number that is divisible by a lucky number. For example, \(14\), \(36\) and \(747\) are almost lucky, but \(2\) and \(17\) are not. Note that a number can be both lucky and almost lucky at the same time (for example, \(747\)).

You are given long longs a and b. Return the number of almost lucky numbers between \(a\) and$ \(b\) ,inclusive.

Input

Multiple test cases.

Each test cases is two number \(a\),\(b\) in a line seperated by a space.

\(a\) will be between \(1\) and \(10^{10}\), inclusive.

\(b\) will be between \(a\) and \(10^{10}\), inclusive.

Output

For each test case, output the answer in a single line.

Sample Input

1 10

14 14

1 100

1234 4321

Sample Output

3

1

39

1178

首先不难想到\([1,10^{10}]\)内的lucky number不多,我们可以枚举出来,且可以去除包含关系(即若\(a \mid b\),\(b\)就没有存在的必要了)。这样算下来本质上有用的lucky number个数\(N\)只是\(O(10^3)\)级别。

首先答案每次区间可减性,即\([a,b]\)的答案为\([1,b]\)的答案减去\([1,a-1]\)答案。对于区间\([1,n]\),我们显然可以用\(2^N\)的容斥原理。但是\(N\)太大,看上去\(2^N\)会TLE。但是由于LCM变化太大,当LCM比\(n\)大时候break复杂度就在期望的范围内了。但是可能需要卡卡常数(我懒得卡了)。

#include<cstdio>
#include<cstdlib>
using namespace std; typedef long long ll;
#define maxn (10010)
ll A,B,lucky[maxn]; int tot,N; bool exist[maxn]; inline ll gcd(ll a,ll b) { return b?gcd(b,a%b):a; } inline void dfs(ll num,int logten)
{
if (logten > 10) return;
if (logten) lucky[++tot] = num;
dfs(num*10LL+4LL,logten+1); dfs(num*10LL+7LL,logten+1);
} inline void DFS(ll range,ll &res,ll lcm,int now,int f)
{
if (now > N) { if (lcm > 1) res += (range/lcm)*f; return; }
DFS(range,res,lcm,now+1,f);
ll d = gcd(lcm,lucky[now]);
if (lcm <= (range*d+lucky[now])/lucky[now]&&lcm/d*lucky[now]<=range)
DFS(range,res,lcm/d*lucky[now],now+1,-f);
} inline ll calc(ll range)
{
ll ret = 0;
DFS(range,ret,1,1,-1);
return ret;
} int main()
{
freopen("3502.in","r",stdin);
freopen("3502.out","w",stdout);
dfs(0,0);
for (int i = 1;i <= tot;++i)
for (int j = 1;j <= tot;++j)
{
if (i == j) continue;
if (!(lucky[i] % lucky[j])) exist[i] = true;
}
for (int i = 1;i <= tot;++i) if (!exist[i]) lucky[++N] = lucky[i];
while (scanf("%lld %lld",&A,&B) != EOF) printf("%lld\n",calc(B)-calc(A-1));
fclose(stdin); fclose(stdout);
return 0;
}

SCU3502 The Almost Lucky Number的更多相关文章

  1. 枚举 + 进制转换 --- hdu 4937 Lucky Number

    Lucky Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)To ...

  2. HDOJ 4937 Lucky Number

    当进制转换后所剩下的为数较少时(2位.3位),相应的base都比較大.能够用数学的方法计算出来. 预处理掉转换后位数为3位后,base就小于n的3次方了,能够暴力计算. . .. Lucky Numb ...

  3. 题目1380:lucky number

    转载请注明文本链接 http://blog.csdn.net/yangnanhai93/article/details/40441709 题目链接地址:http://ac.jobdu.com/prob ...

  4. HDU 3346 Lucky Number

    水题 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> us ...

  5. 九度oj 题目1380:lucky number

    题目描述: 每个人有自己的lucky number,小A也一样.不过他的lucky number定义不一样.他认为一个序列中某些数出现的次数为n的话,都是他的lucky number.但是,现在这个序 ...

  6. 『NYIST』第九届河南省ACM竞赛队伍选拔赛[正式赛二]- Nearly Lucky Number(Codeforces Beta Round #84 (Div. 2 Only)A. Nearly)

    A. Nearly Lucky Number time limit per test 2 seconds memory limit per test 256 megabytes input stand ...

  7. ZOJ 3233 Lucky Number

    Lucky Number Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Original I ...

  8. B - Nearly Lucky Number

    Problem description Petya loves lucky numbers. We all know that lucky numbers are the positive integ ...

  9. lightoj 1097 - Lucky Number(线段树)

    Lucky numbers are defined by a variation of the well-known sieve of Eratosthenes. Beginning with the ...

随机推荐

  1. [转]使用Beaglebone Black的SPI

    分类: Beaglebone Black2013-11-24 18:21 678人阅读 评论(6) 收藏 举报 beaglebone blackbeagleboneSPIdevice tree   目 ...

  2. mysql中 的 ENGINE = innodb; 是什么意思?

    存储引擎是innodb.nnoDB 是 MySQL 上第一个提供外键约束的数据存储引擎,除了提供事务处理外,InnoDB 还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户 ...

  3. 介绍SmartUpload很好的网站

    附带链接:http://www.cnblogs.com/elleniou/archive/2012/09/24/2700583.html

  4. UpdateProgress使用

    UpdateProgress是一个进度显示条,加在AJAX里能显得更加的人性化(个人认为).现在我们就开始吧: 第一.新建一个AJAX项目.在页面上加上ScriptManager,UpdatePane ...

  5. 大型网站的架构设计问题—-大型高并发高负载网站的系

    转载:http://www.cnblogs.com/cxd4321/archive/2010/11/24/1886301.html 随着中国大型IT企业信息化速度的加快,大部分应用的数据量和访问量都急 ...

  6. Dapper.NET - ORM(ibatis.Net)

    Dapper.NET使用 1.为什么选择Dapper 2.以Dapper(4.0)为例. 2.1 在数据库中建立几张表. 2.2实体类. 3.使用方法 3.1  一对一映射 3.2 一对多映射 3.3 ...

  7. CSS控制长文本内容显示(截取的地方用省略号代替)

    自动换行问题,正常字符的换行是比较合理的,而连续的数字和英文字符常常将容器撑大,下面介绍的是CSS如何实现处理的方法. 现实中经常出现一些内容比较长的文本,为了使整体布局美观,需要将文本内容控制在一行 ...

  8. html-----008

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. js【输入一个日期】返回【当前12个月每月最后一天】

    Date.prototype.Format = function (fmt) { //author: meizz var o = { "M+": this.getMonth() + ...

  10. javaee学习-JSP指令简介

    JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分. 在JSP 2.0规范中共定义了三个指令: page指令 Inclu ...