【题目描述】
在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”!但是这种“幸运号码”总是太少了,比如在[1,100]的区间内就只有6个(6,8,66,68,86,88),于是他又定义了一种“近似幸运号码”。lxhgww规定,凡是“幸运号码”的倍数都是“近似幸运号码”,当然,任何的“幸运号码”也都是“近似幸运号码”,比如12,16,666都是“近似幸运号码”。
现在lxhgww想知道在一段闭区间[a, b]内,“近似幸运号码”的个数。
【输入】
输入数据是一行,包括2个数字a和b
【输出】
输出数据是一行,包括1个数字,表示在闭区间[a, b]内“近似幸运号码”的个数
【样例输入1】
1 10
【样例输出1】
2
【样例输入2】
1234 4321
【样例输出2】
809
【数据范围】
对于30%的数据,保证1<=a<=b<=1000000
对于100%的数据,保证1<=a<=b<=10000000000

思路:
先找出幸运号码 然后把存在倍数关系的去除
然后用容斥原理 加单个数 减2个数lcm 加3个数lcm....
注意:以前用的时候都是质数 所以当时只要乘积(我开始就是用乘积 坑爹)
从大到小容斥 不然会TEL(我又TEL好久了)
从大到小会少好多无用计算,毕竟从小到大越后面越难有符合的
#include <iostream>
#include <string>
#include<sstream>
#include <cmath>
#include <map>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define LL long long
LL dp[];
int h[];
int num;
LL ans;
void dfs(LL n,int deep)
{
if(deep>) return;
dp[num++]=n*+;
dfs(n*+,deep+);
dp[num++]=n*+;
dfs(n*+,deep+);
}
void init()
{
num=;
dfs(,);
sort(dp,dp+num);
int i,j;
for(i=;i<num;i++)
if(!h[i])
for(j=i+;j<num;j++)
if(dp[j]%dp[i]==)
h[j]=;
j=;
for(i=;i<num;i++)
if(!h[i])
dp[j++]=dp[i];
num=j;
for(i=;i<num/;i++)
swap(dp[i],dp[num-i-]); }
LL gcd(LL a,LL b)
{
LL r;
while(r=a%b){a=b;b=r;}
return b;
}
LL a,b;
void dfss(int deep,int index,LL val)
{
LL t;
for(int i=index;i<num;i++)
{
if(dp[i]>b) continue;
LL g=gcd(val,dp[i]);
if((val/g)>(b/dp[i])) continue;
t=val/g*dp[i];
if(deep&) ans+=(b/t-a/t);
else ans-=(b/t-a/t);
dfss(deep+,i+,t);
}
}
int main()
{
init();
while(scanf("%lld %lld",&a,&b)!=EOF)
{
ans=;a--;
dfss(,,);
printf("%lld\n",ans);
}
return ;
}

最新文章

  1. js get browser vertion (js获取浏览器信息版本)
  2. Mysql数据库的工作原理
  3. mysql命令行导入sql文件
  4. (博弈论)hdoj 1525 Euclid&#39;s Game
  5. js写分页
  6. 【转】Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历))
  7. git 拉取分支代码 合分支
  8. c/c++ 标准库 智能指针( smart pointer ) 是啥玩意儿
  9. csrfguard3.1 部署笔记
  10. Delphi Format 格式化数字
  11. encodeURIComponent编码与解码
  12. Selenium:三种等待方式
  13. vs2013 报错error C1083: 无法打开包括文件:“gl\glew.h”: No such file or directory\
  14. Rehash死锁的问题
  15. python之virtualenv
  16. L1-013 计算阶乘和
  17. springboot引入springSecurity无法post提交表单
  18. oi之詩
  19. c++ ACM常用函数
  20. 一行代码轻松实现拖动效果[JQuery]

热门文章

  1. 百度编辑器(ueditor)@功能之获取坐标
  2. zDialog弹出层插件
  3. Angular内提供了一个可以快速建立测试用web服务的方法:内存 (in-memory) 服务器
  4. js打乱数组的实战应用
  5. Ghost:一款简约风格博客系统
  6. shell---正则表达式和文本处理器
  7. 安装VMware Tools:Ubuntu
  8. hdu 6058 Kanade&#39;s sum(模拟链表)
  9. LeetCode OJ:Nim Game(Nim游戏)
  10. SpringAnnotation之配置AnnotationXML文件