1 条题解
-
0
题目重述
从区间 中选取 个整数(可重复),求这些数的最大公约数恰好为 的方案数,结果对 取模。
关键思路
问题转换
设选出的数为 ,则 等价于:
所有 都是 的倍数
设 ,则
区间变换
令:, 如果 ,则没有符合条件的数,答案为 。
否则,问题转化为:在区间 中选 个整数 ,使得 的方案数。
容斥原理与莫比乌斯反演
定义函数
设 表示 是 的倍数 的方案数。
区间 中 的倍数的个数为: $\text{cnt}(d) = \left\lfloor \frac{h'}{d} \right\rfloor - \left\lceil \frac{l'}{d} \right\rceil + 1$
即: $\text{cnt}(d) = \frac{h'}{d} - \frac{l'+d-1}{d} + 1$
因此:
莫比乌斯反演
设 表示 恰好等于 的方案数。
设 表示 恰好等于 的方案数。
那么:
由莫比乌斯反演:
我们要求的是 ,即:
算法实现
代码思路
1.预处理:计算 ,
2.特殊情况:如果 ,输出
3.计算 :对于每个 ,计算区间内 的倍数的个数 ,然后 (减去所有数相同的情况)
4.容斥计算:从大到小枚举 ,减去 (其中 是 的倍数)
5.特殊处理:如果 ,加上所有数都取 的情况
复杂度分析
区间长度 ,循环在 内完成,可以接受。
总结
本题通过除以 将问题转化为 的情况,利用区间倍数个数和容斥原理(或莫比乌斯反演)求解,能够高效处理 的大范围 情况。
- 1
信息
- ID
- 4895
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者