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

AT_abc412_e [ABC412E] LCM Sequence 个人题解

题目链接

题目大意

指定 \(a_{i}\) 代表小于等于 \(i\) 全部数的最小公倍数,给你 \(l\)\(r\) 让你求出在 \(l\le i \le r\) 中有几个不同的 \(a_{i}\)

Solution

我们先观察一下样例解释发现一个很有趣的事情,\(2\)\(3\) 的最小公倍数是 \(6\)(不从 \(1\) 开始算是因为 \(1\) 与任何数的最小公倍数都是另一个数)即 \(a_{3}=6\),当我们算到 \(a_{4}\) 时其实是在 \(a_{3}\) 上乘了个 \(2\),这样就凑出了 \(4\)(因为 \(a_{4}=2*2*3\)),所以可以发现其实当算到 \(a_{i}\) 时,保证 \(a_{i}\) 中可以凑出 \(i\) 时不用更改,直接就是 \(a_{i-1}\);否则要往里面乘上个数来满足 \(a_{i}\)\(i\) 的倍数。

有了上面的发现我们可以得出 \(l\)\(r\) 中发生变化的情况一定是出现了素数及其幂,如何证明呢?可以用到算数基本定理即一个数可以被拆成 \(p_{1}^{c_{1}}p_{2}^{c_{2}}\ldots p_{m}^{c_{m}}\),其中的 \(p_{i}\) 为素数,可以发现每次更改时一定是乘上一个素数(因为合数都可以由素数乘出来),只有出现素数的幂时才会必须再乘上这个素数(因为之前已有的素数的次数无法凑出这个数),综上我们只需要处理在 \(l\)\(r\) 之间出现了几个素数以及素数的幂,不过值得注意的是 \(a_{l}\) 也算一个,因为在它之前没有了,它就是这段区间最小公倍数的初始值(后面需要乘素数时都是乘在这里面)。

我们可以先处理指数为 \(1\) 的情况(此时其实就是 P1835),就是筛出 \(l\)\(r\) 里的素数,由于 \(l\)\(r\) 的数据范围很大,不能直接处理,但是 \(r-l\) 只有 \(10^6\),所以我们可以先用线性筛处理出前 \(10^7\) 的素数然后把 \(l\)\(r\) 中能被 \(p_{i}\) 整除的标记,即标记 \(i*p_{i}(\lceil\frac{l}{p_{i}}\rceil\le i \le\lfloor \frac{r}{p_{i}}\rfloor)\) 为合数,然后统计没被标记出来的就是 \(l\)\(r\) 之间的素数。然后我们标记这些素数的幂就好了。

代码

#include<bits/stdc++.h>
using namespace std;
const int N=2e7;
long long l,r,p[N],ans=1,tot;
//l,r是左右边界,p[i]存的是素数,ans统计答案,tot是素数的个数 
bool vis[N],ok[N];
//vis[i]标记素数/合数,ok[i]标记素数的幂 
int main(){memset(vis,true,sizeof(vis));scanf("%lld%lld",&l,&r);l++;//因为一开始我们把ans=1,所以初始左边界不用再算,直接+1 for(register int i=2;i<=1e7;i++){//线性筛预处理1e7以内的素数 if(vis[i])p[++tot]=i;for(int j=1;j<=tot && i*p[j]<=1e7;j++){vis[i*p[j]]=false;if(i%p[j]==0)break;}}memset(vis,true,sizeof(vis));//上面的vis[i]标记的是素数,我们初始化后来标记l到r中的合数 for(int i=1;i<=tot;i++){long long pre=p[i],start=(pre+l-1)/pre*pre,end=r/pre*pre;//左右边界 if(start==pre)//如果左右边界正好在这个素数上要向里收缩 start+=pre;if(end==pre)end-=pre;for(register long long j=start;j<=end;j+=pre)//标记l到r中的合数 vis[j-l]=false;long long k=pre*pre;for(;k<=r;k*=pre)//标记l到r中素数的幂 if(k>=l)ok[k-l]=true;}for(int i=0;i<=r-l;i++) if(vis[i] || ok[i])//如果不是合数或者是素数的幂,答案+1 ans++;printf("%lld",ans);return 0;
}
http://www.jsqmd.com/news/51365/

相关文章:

  • 2025 年企业年会直播,企业活动直播公司推荐 微吼:华为全球直播供应商 6400+CDN 节点支撑的高稳定活动直播平台
  • 一对一网课哪个平台好?2026 权威测评 + 高性价比榜单​
  • 2025 年医学企业直播,企业大会直播,企业展会直播公司推荐 微吼直播:44 项专利护航千万级并发 全场景数字化活动解决方案服务商
  • DP 入门
  • LeetCode 410 - 分割数组的最大值 - 实践
  • 2025年11月高新技术企业认定公司推荐:榜单分析与选择指南
  • 2025年11月数据标注平台推荐选择指南:基于实际需求的技术路线与成本考量
  • 2025 最新硫化仪厂家推荐排行榜:无转子 / 橡胶 / 门尼粘度仪硫化仪实力厂家技术与售后测评
  • 2025年11月取暖器品牌推荐选择指南:专业分析维度助力家庭精准决策
  • 109_尚硅谷_函数介绍和应用案例
  • 2025 年 11 月羽绒服厂家精选推荐榜:薄款/厚款/男款/女款/可水洗/复古款/潮流/街头风/休闲/运动/通勤/百搭,时尚设计与实用功能兼具的冬日穿搭首选
  • 2025年11月高新技术企业认定公司推荐:知名榜单与选择指南
  • 2025年厚壁钢管生产商权威推荐榜单:钢板卷钢管/非标钢管/不锈钢管源头厂家精选
  • AIGC降重指令全攻略:10个高效技巧助你论文快速过审
  • 2025年11月沈阳酒店推荐深度解析:核心价值点与专业维度评估
  • 2025 成型机厂家最新推荐排行榜:冷弯 / 粉末 / 光伏配套 / 门业设备权威榜单,源头厂家实力优选指南C 型槽 / 轻钢龙骨 / 电缆桥架 / 圆管成型机推荐
  • Linux写文件到windows共享文件夹
  • 基于维纳滤波器的语音去噪Matlab实现
  • 2025 年 11 月棒球帽品牌实力推荐榜:薄款厚款男女款可水洗,潮流百搭防晒抗皱,街头风复古甜美帅气款精选合集
  • 2025草本洗发水最新top5榜单公布,行业权威数据及市场口碑推荐,防脱/止痒/无硅油/控油/深层滋养/平价/温和洁净/敏感头皮可用品牌及选择指南
  • 2025 年 11 月羽绒服厂家潮流推荐榜:薄款/厚款/男女新款,可水洗/抗皱/百搭设计,涵盖简约/复古/街头风/甜美/帅气多元风格,小红书热门潮牌精选
  • 2025年11月幼猫罐头产品推荐热度榜:基于性能指标的结果承诺保障方案
  • 2025厦门留学机构有哪些地方
  • 2025留学中介十大
  • 2025年11月幼猫罐头产品推荐对比分析:三大阵营专业维度深度评测报告
  • 2025广州的留学机构有哪些公司
  • 2025北京的留学机构排名一览表
  • 2025年郑州享标体方案服务商权威推荐榜单:郑州瘦身加盟渠道/郑州身材管理平台/郑州减肥加盟服务商精选
  • 2025年11月猫罐头产品品牌推荐权威榜单:十大品牌核心价值与解决方案解析
  • 2025年11月高新技术企业认定公司推荐:权威榜单与选择指南