区间欧拉函数筛法
类似于 筛素数,我们可以通过标记所有数的质因数来计算欧拉函数。对于每个区间 \([L, R]\),我们通过一个类似于素数筛的方式来逐步更新每个数的欧拉函数值。
如果我们已经有了一个区间 \([L, R]\) 的数,可以利用筛法从小到大的方式更新每个数的欧拉函数值。基本的思想是:对于每个素数 \(p\),我们可以通过 欧拉定理 更新区间内的数的欧拉函数。
区间欧拉函数筛法证明
区间欧拉函数筛法的核心思想是通过筛选素数来逐步更新区间内每个数的欧拉函数。下面我们一步步来看:
-
欧拉函数的乘法性质:
欧拉函数 \(\phi(n)\) 其实是通过一个数 \(n\) 的质因数来计算的。如果 \(n\) 的质因数是 \(p_1, p_2, \dots, p_k\),那么:\[\phi(n) = n \times \prod_{i=1}^k \left(1 - \frac{1}{p_i}\right) \]这就是通过质因数的影响来计算欧拉函数。
-
筛选小于等于 \(\sqrt{R}\) 的素数:
在区间 \([L, R]\) 上,我们会用筛法找到小于等于 \(\sqrt{R}\) 的素数。对于每个素数 \(p\),我们会更新区间内所有能被 \(p\) 整除的数的欧拉函数值。具体来说,对于每个能被 \(p\) 整除的数 \(n = kp\)(其中 \(k\) 是正整数且 \(n \in [L, R]\)),我们使用以下公式来更新它们的欧拉函数值:\[\phi(kp) = \phi(kp) \times \left(1 - \frac{1}{p}\right) \]这个公式确保了每个数的欧拉函数值能够反映它的质因数。
-
素数的特性:
如果某个数 \(n\) 没有被任何 \(p\) 更新过,说明 \(n\) 是素数。根据欧拉函数的定义,素数 \(p\) 的欧拉函数值应该是 \(\phi(p) = p - 1\)。所以在筛选过程中,如果某个数没有被更新,它就一定是素数,且其欧拉函数值自然为:\[\phi(n) = n - 1 \]
结论
通过筛选区间 \([L, R]\) 中所有小于等于 \(\sqrt{R}\) 的素数,我们可以逐步更新区间内每个数的欧拉函数值,最终得到所有数的欧拉函数。这个过程类似于素数筛法,通过去除所有非素数,最终我们可以得到每个数的欧拉函数。