题解 P7586 [COCI2012-2013#1] SNAGA
洛谷。
题意
应该好理解,没理解的话可以看一下下面暴力的代码。
分析
观察这种题,范围
而这题,他有一个不能整除的性质,看来只有数学来解决了,先确定了一个大的方向。
先打一个暴力,打个小表来分析一下性质:
inline int js(int x) { if(x==2) return 1; for(int j=2;j<=x;++j) if(x%j) return 1+js(j); }
输出前一百个观察一下:
再随机几个我们发现,所有的
由此,我们再次分析一下我们的操作,可以得到几个性质(令
- 奇数的
必然为 。 - 所有小于
的数都是 的因数。
看起来有点像废话?所有小于
输出一下前缀的 lcm:
当我们的
再分析一下
先给出结论:
是一个奇数,那么 ; 是一个奇数,那么 ; 是一个偶数,那么 。
这三个结论中的前两个都应该是很显然的,着重分析一下第 3 个。
因为
那为什么我们的
因此,我们对其造成关键的实际上是
而
最后轮到了如何求答案了,我们分开处理三种数,可能不太好算,我们令其一部分放在一起考虑。
我们令基础的贡献为 3,那么,我们只要减去奇数的个数,就可以处理出 1,2 的贡献,同时,计算了一部分的 3,我们只需要加上第三种数字的个数即可。
对于这一部分,我们又要分成 4 种,根据
要使
for(int i=2;i<=5;++i) { res+=x/num[i];//num为预处理的前缀lcm ll y=num[i]*(1<<i)/__gcd(num[i],(1<<i)); if(y<0) continue;//防止爆 res-=x/y; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!