当前位置: 首页 > news >正文

洛谷题单指南-组合数学与计数-P2567 [SCOI2010] 幸运数字

原题链接:https://www.luogu.com.cn/problem/P2567

题意解读:幸运数字由6和8组成,近似幸运数字是幸运数字的倍数,求[a,b]区间内近似幸运数字的个数。

解题思路:

通过暴搜可以枚举出所有的幸运数字。

不妨设幸运数字为x、y、z,显然,如果x、y、z中有互为倍数的,可以将其中的倍数去掉。

对于[a,b]中x的倍数,其个数为b/x-(a-1)/x,原理是:1~a-1中x的倍数个数为(a-1)/x,1~b中x的倍数个数为b/x,那么[a,b]中x的倍数个数为b/x-(a-1)/x。

我们可以得到[a,b]中x的倍数个数xcnt,y的倍数个数ycnt,z的倍数个数zcnt,xcnt+ycnt+zcnt里会出现重复计算,比如既是x又是y的倍数,

既是x又是y的倍数可以认为是lcm(x,y)的倍数,个数为xycnt=b/lcm(x,y)-(a-1)/lcm(x,y),

同理,

既是y又是z的倍数个数为yzcnt=b/lcm(y,z)-(a-1)/lcm(y,z),

既是x又是z的倍数个数为xzcnt=b/lcm(x,z)-(a-1)/lcm(x,z),

xcnt+ycnt+zcnt-xycnt-yzcnt-xzcnt中,对于同时是x、y、z的倍数的个数减多了,设xyzcnt=b/lcm(x,y,z)-(a-1)/lcm(x,y,z)

最后答案是xcnt+ycnt+zcnt-xycnt-yzcnt-xzcnt+xyzcnt。

原来这,是容斥原理。

推导到多个幸运数字的情况,可以用DFS来枚举所有的子集,再根据子集中个数奇偶来确定对答案的贡献是加还是减。

剪枝事项:

1、幸运数字从大到小排,倍数更快达到上限

2、倍数如果超过上限,不再继续DFS

3、幸运数字中有互为倍数的进行去重

注意事项:

计算LCM中可能会超过long long,需要用double

100分代码:

#include <bits/stdc++.h>
using namespace std;typedef long long LL;
vector<LL> lucky1, lucky2; //所有幸运数字
bool del[1000000];
LL a, b, ans;void init(LL x)
{if(x > b) return;lucky1.push_back(x);init(x * 10 + 6);init(x * 10 + 8);
}LL GCD(LL a, LL b)
{return b == 0 ? a : GCD(b, a % b);
}double LCM(LL a, LL b) //注意计算LCM时可能会溢出,用double存储
{return 1.0 * a / GCD(a, b) * b;
}void dfs(int idx, LL cnt, LL lcm)
{if(lcm > b) return;if(idx == lucky2.size()){if(cnt == 0) return; //空集不考虑if(cnt % 2 == 1) ans += b / lcm - (a - 1) / lcm;else ans -= b / lcm - (a - 1) / lcm;return;}dfs(idx + 1, cnt, lcm); //不选当前幸运数字if(LCM(lcm, lucky2[idx]) <= b)dfs(idx + 1, cnt + 1, LCM(lcm, lucky2[idx]));//选当前幸运数字
}int main()
{cin >> a >> b;//生成所有幸运数字init(6);init(8);//排序,去掉倍数sort(lucky1.begin(), lucky1.end());for(int i = 0; i < lucky1.size(); i++){if(del[i]) continue;lucky2.push_back(lucky1[i]);for(int j = i + 1; j < lucky1.size(); j++){if(lucky1[j] % lucky1[i] == 0) del[j] = true;}}//从大到小排序reverse(lucky2.begin(), lucky2.end());//DFS枚举所有幸运数字组合的子集,容斥计算答案dfs(0, 0, 1);cout << ans;return 0;
}

 

http://www.jsqmd.com/news/49532/

相关文章:

  • 学培课堂靠谱吗?从课程质量到口碑的深度分析
  • Gemini 3.0 炸裂发布!前端又死了???
  • 苏州交通便利公墓推荐:环境与服务兼备之选
  • 太仓价格合理的公墓排名及服务特色参考
  • 2025年电线电缆厂家五星推荐:鑫佰亿线缆,电力电缆、高压电缆、中压电缆、低压电缆、全品类电缆守护用电安全
  • 昆山墓地环境好的有哪些?周边值得关注的墓园推荐
  • 五年一贯制专转本机构有哪些?2025年行业机构盘点
  • DRAM
  • 2025年ai优化公司权威推荐榜单:ai搜索优化/ai优化效果/geo优化推广源头公司精选
  • Minimind-一个开源LLM项目的代码分析2:模型训练
  • 修改文件名
  • 20251124
  • 信誉好的动物实验公司选择指南:五家值得信赖的权威机构推荐
  • AtCoder Beginner Contest 433 部分题解
  • 2025年11月浙江翻译机构最新推荐:覆盖杭州、温州、绍兴、台州、衢州、丽水等多地场景适配方案
  • 安全合规的动物实验机构盘点:五家优质服务商助力医药研发
  • 正规动物实验机构权威推荐:五家优质服务商深度解析
  • 哪家做动物实验比较好?五家优质服务商权威推荐与分析
  • 动物实验机构选择指南:五家资质齐全的权威服务商推荐
  • 基于MATLAB的语音识别实现方法
  • 2025年浙江本地翻译机构最新企业观察:温州翻译机构、湖州翻译机构、绍兴翻译机构、台州翻译机构聚焦中小型翻译机构的服务实践
  • 2025年正规动物实验机构推荐:五大服务商助力生物医药创新与合规发展
  • 国内外蓝牙芯片原厂都有那些
  • ufs and emmc
  • 上海长租公寓推荐:魔方公寓领跑品质租住
  • 2025年上海长租公寓推荐:合规标杆魔方公寓,成新青年租房选择
  • 2025动物实验机构口碑推荐:五家优质服务商深度解析
  • 解锁微信封闭生态WeRSS原理分析与部署实战
  • 2025 长租公寓推荐!魔方公寓凭什么成新生代选择?
  • 2025年智能化展厅定做厂家权威推荐榜单:企业展厅LED屏/企业展示展厅/展厅展馆互动多媒体源头厂家精选