博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1853: [Scoi2010]幸运数字
阅读量:6277 次
发布时间:2019-06-22

本文共 1392 字,大约阅读时间需要 4 分钟。

思路:

容斥原理

先预处理出所有的幸运数字,然后去重,然后用容斥原理求

有一个优化,从大的开始求lcm,如果大于b了就不用枚举了,这是因为两个大于1e5的乘起来就会

所以最后枚举的子集只用在小于1e5中考虑就行了,小于1e5只有很少

还有要用unsigned long long,不然会溢出

代码:

#pragma GCC optimize(2)#pragma GCC optimize(3)#pragma GCC optimize(4)#include
using namespace std;#define fi first#define se second#define pi acos(-1.0)#define LL unsigned long long//#define mp make_pair#define pb push_back#define ls rt<<1, l, m#define rs rt<<1|1, m+1, r#define ULL unsigned LL#define pll pair
#define pii pair
#define piii pair
#define mem(a, b) memset(a, b, sizeof(a))#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#define fopen freopen("in.txt", "r", stdin);freopen("out.txt", "w", stout);//head const int N = 4000;LL a, b, ans = 0;LL Luck[N], luck[N];LL lcm(LL a, LL b) { return a / __gcd(a, b) * b;}void dfs(LL sum, int cnt, int pos) { if(sum > b) return ; if(pos == -1) { if(cnt == 0) return ; if(cnt&1) ans += b/sum - a/sum; else ans -= b/sum - a/sum; return ; } dfs(sum, cnt, pos-1); dfs(lcm(sum, luck[pos]), cnt+1, pos-1);} int main() { scanf("%llu %llu", &a, &b); a--; int tot = 0; for (int l = 1; l <= 10; l++) { for (int i = 0; i < (1<
= 0; j--) { if(i&(1<

 

转载于:https://www.cnblogs.com/widsom/p/9694280.html

你可能感兴趣的文章
【Docker学习笔记(四)】通过Nginx镜像快速搭建静态网站
查看>>
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
查看>>
<转>云主机配置OpenStack使用spice的方法
查看>>
java jvm GC 各个区内存参数设置
查看>>
[使用帮助] PHPCMS V9内容模块PC标签调用说明
查看>>
关于FreeBSD的CVSROOT的配置
查看>>
基于RBAC权限管理
查看>>
基于Internet的软件工程策略
查看>>
数学公式的英语读法
查看>>
留德十年
查看>>
迷人的卡耐基说话术
查看>>
PHP导出table为xls出现乱码解决方法
查看>>
PHP问题 —— 丢失SESSION
查看>>
Java中Object类的equals()和hashCode()方法深入解析
查看>>
数据库
查看>>
Vue------第二天(计算属性、侦听器、绑定Class、绑定Style)
查看>>
dojo.mixin(混合进)、dojo.extend、dojo.declare
查看>>
Python 数据类型
查看>>
iOS--环信集成并修改头像和昵称(需要自己的服务器)
查看>>
PHP版微信权限验证配置,音频文件下载,FFmpeg转码,上传OSS和删除转存服务器本地文件...
查看>>