Description
题目链接:UVa 10140
给定区间 $[L,R]$,求这个区间中相邻的两个质数的差的最小值和最大是分别是多少,并输出对应的 $2$ 个质数;如果没有则输出 There are no adjacent primes.
。
本题多组数据。
数据范围:$1\le L<R<2^{31}$,$R-L\le 10^6$
Solution
首先我们发现:$R-L$ 的范围很小,我们应该要能够快速求出 $L\sim R$ 之间的质数。
显然有推论:任意一个合数 $x$ 必定包含一个不超过 $\sqrt x$ 的质因子。
所以我们可以筛出 $[1,\sqrt R]$ 之间的所有质数,对于每个质数 $p$,把 $[L,R]$ 中能被 $p$ 整除的数标记为合数。最终没有被标记的数就是质数,对相邻的质数两两比较,找出差值最小和最大的即可。
时间复杂度:$O(\sum_{p\le \sqrt R}\frac{R-L}{p})=O(\sqrt R\log^2\sqrt R+(R-L)\log^2 R)$(该复杂度摘自:李煜东《算法进阶指南》)
Code
1 |
|