2025.03.29 CW 模拟赛 A. 因子

题面 & 题解.

A. 因子

思路

首先因为 \(2 \le l \le r \le 10^{12}\), 我们不可能把所有在 \(10^{12}\) 以内的素数全部筛出来. 不过我们可以注意到一个性质

  • 如果一个数 \(x\)\([1, \lfloor \sqrt{x} \rfloor]\) 范围内没有能够整除 \(x\) 的数, 那么 \(x\) 一定是一个素数.

于是我们预处理素数的范围就将至 \(10^6\) 了.

考虑如何求出每一个数的最小质因子. 最朴素的想法就是对于每一个 \(l \le i \le r\), 我们枚举 \([1, \sqrt i]\) 内的素数, 如果有整除 \(i\) 的, 直接输出即可, 否则输出 \(i\). 时间复杂度 \(\mathcal{O}(\textrm{len} \sqrt r)\).

换个思路, 我们从小到大对于每一个素数枚举其在 \([l, r]\) 区间内的所有倍数, 如果该数没有被标记过, 那么就将这个数的最小质因子标记为当前枚举的素数. 到最后都没有被标记的数就是素数.

时间复杂度 \(\mathcal{O}(\textrm{len} \ln n)\).

posted @ 2025-03-30 20:49  Steven1013  阅读(6)  评论(0)    收藏  举报