$\mathcal{OI}$生涯中的各种数论算法的证明

嗯,写这个是因为我太弱了\(ORZ\).

#\(\mathcal{color{silver}{1 \ \ Linear \ \ Sieve \ \ Method \ \ of \ \ Prime}}\)线性筛素数

嗯,其实对于这个而言,无非就是一个\(break\)不易理解而已。

if(! (i % prime[j])) break ;

那么我们先来分析线性筛的复杂度,嗯,很显然因为是\(O(n)\)才称其为线性筛法。所以也就是说,对于每个合数,我们只让它被筛去一次。那么线性筛是如何保证的呢?答:每个合数都会被自己最小的质因子筛掉

下面让我们来分析合理性,

证明一:在线性筛法中,每个合数都会被自己最小的质因子筛掉。

我们令\(N\)为一个合数,且他的标准分解式为\[N = p_1^{k_1}p_2^{k_2}p_3^{k_3}...p_t^{k_t}\]。不妨令\[p_1 < p_2 < p_3... <p_t\]. 我们考虑当用\(p_1\)筛除时,令\(N'=p_1^{k_1 - 1}p_2^{k_2}p_3^{k_3}...p_t^{k_t}, \ \ N' \times p_1 = N\),那么会因为p_i会第一次被使用而使得\(N\)被成功筛掉(\(k_1\)的值无关紧要)。但是我们考虑,如果用\(p_s \ \ (s \neq 1)\)筛除的话,那么若令\(i = \frac{N}{p_s}\)

证明二:线筛中,每个合数当前不被筛的原因是因为它要被放到之后去筛。

猜你喜欢

转载自www.cnblogs.com/pks-t/p/9212764.html