用于线性预处理积性函数的值。
引入一个概念 low
表示一个数的最小质因子的幂。因为一个数只会被它的最小质因子筛出,所以 primes[j] * i
的最小质因子为 primes[j]
,当 i % primes[j] == 0
时,说明 i
也有因子 primes[j]
,而 i
是primes[j] * i
的因数,所以 i
的最小质因子也为 prmies[j]
,积性函数中计算 f(a * b) = f(a) * f(b)
的条件是 a 与 b 互质
,所以将 low[i]
从 a
中分给 b
,两者积不变,保证答案一样,而 a / low[i]
中不含有质因子 primes[j]
,而 b * low[i]
只含有质因子 primes[j]
,从而保证它们互质。
未筛过的数一定没有 low
,从而代替 vis
数组。
Take phi as an example.
查看代码
1 | void init() |