[bzoj1853]幸运数字
2024-09-07 04:02:45
容易发现幸运数字只有1024个,暴力标记倍数还是会tle的
容斥,即从中任选i个的lcm,复杂度为$o(2^1024)$
剪枝一:当答案超过1024就不用算了
剪枝二:当某个数是另一个数的倍数时就删掉
(另外求lcm可能会爆long long,由于爆了long long一定不合法,因此可以用除法来判定)
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define ll long long
4 ll x,y,ans,a[10005];
5 ll gcd(ll x,ll y){
6 if (!y)return x;
7 return gcd(y,x%y);
8 }
9 void tot(ll k){
10 if (k>y)return;
11 if (k)a[++a[0]]=k;
12 tot(k*10+6);
13 tot(k*10+8);
14 }
15 void dfs(int k,int s,ll val){
16 if (k>a[0]){
17 ans+=(y/val-(x-1)/val)*(s*2-1);
18 return;
19 }
20 dfs(k+1,s,val);
21 ll g=val/gcd(val,a[k]);
22 if (g<=y/a[k])dfs(k+1,s^1,a[k]*g);
23 }
24 int main(){
25 scanf("%lld%lld",&x,&y);
26 tot(0);
27 sort(a+1,a+a[0]+1);
28 for(int i=a[0];i;i--)
29 for(int j=1;j<i;j++)
30 if (a[i]%a[j]==0)a[i]=0;
31 sort(a+1,a+a[0]+1);
32 for(int i=1;i<=a[0]/2;i++)swap(a[i],a[a[0]-i+1]);
33 while (!a[a[0]])a[0]--;
34 dfs(1,0,1);
35 printf("%lld",ans+(y-x+1));
36 }
最新文章
- 【趣事】用 JavaScript 对抗 DDOS 攻击 (下)
- 自己封装的一个原生JS拖动方法。
- xamarin 手机顶部状态栏
- Mysql 数据库之修改标的结构
- MVC项目中使用js 设置Checkbox的选中事件
- 使用javascript对密码进行有密码强度提示的验证
- UpdatePanel的使用
- centos之Haproxy 负载均衡学习笔记
- 使用Mysqldump 备份数据库
- Dynamics CRM Form表单中通过javascript抓取触发change事件字段的属性名
- mysql 新建用户并赋予远程访问权限
- 函数语法:JS获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度(转载)
- ASP.NET - Validators
- OpenGL之纹理贴图(Texture)
- mac eclipse maven -solved
- C#6.0新语法
- 【题解】Luogu SP8791 DYNALCA - Dynamic LCA
- python time 表示方式
- 学习knockoutjs轻量级的MVVM框架
- 秋色园QBlog技术原理解析:性能优化篇:缓存总有失效时,构造持续的缓存方案(十四)
热门文章
- 前段之jQuery
- .net 5.0 ref文件夹的作用
- 第三次Scrum Metting
- [对对子队]会议记录5.16(Scrum Meeting3)
- elf文件--基于《ctf竞赛权威指南pwn篇》
- Noip模拟16 2021.7.15
- Python | 实现pdf文件分页
- 从0到1使用Kubernetes系列(五):Kubernetes Scheduling
- 连续子序列的最大和 牛客网 剑指Offer
- Ubuntu virtualenv 创建 python3 虚拟环境 激活 退出