文章目录
Q : Q: Q: 请以 O ( N ) O(\sqrt{N}) O(N) 的时间复杂度求解下式 ↓ ↓ ↓ ∑ i = 1 N ⌊ N i ⌋ \sum_{i=1}^N\lfloor\frac{N}{i}\rfloor i=1∑N⌊iN⌋
A : A: A: ⌊ N i ⌋ \lfloor\frac{N}{i}\rfloor ⌊iN⌋ 这个数列是 呈块状连续分布 的, 设某个块的 左端点 为 l l l, 则这个块的 右端点 为 N N / l \frac{N}{N/l} N/lN (向下取整略) ,
于是该块的和为 ( r − l + 1 ) ∗ ⌊ N l ⌋ (r-l+1)*\lfloor\frac{N}{l}\rfloor (r−l+1)∗⌊lN⌋,
代码很简短:
for(reg int l = 1, r; l <= N; l = r+1){
r = N/(N/l);
tmp += (r-l+1)*(N/l);
}
定 义 : 定义: 定义:
设 n = p 1 k 1 ∗ p 2 k 2 . . . . . . p m k m n=p_1^{k_1}*p_2^{k_2}......p_m^{k_m} n=p1k1∗p2k2......pmkm
μ ( n ) = { 1 n = 1 ( − 1 ) m ∏ i = 1 m k i = 1 0 e l s e \mu(n)= \begin{cases} 1\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ n=1 \\ (-1)^m \ \ \ \ \ \ \prod_{i=1}^mk_i=1\\ 0 \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ else \end{cases} μ(n)=⎩⎪⎨⎪⎧1 n=1(−1)m ∏i=1mki=10 else
可以看出有 单 个 质 因 子 的 幂 数 超 过 1 单个质因子的幂数超过1 单个质因子的幂数超过1 的数字 莫比乌斯函数 值为 0 0 0 .
性 质 : 性质: 性质:
性 质 1 : 性质1: 性质1: 莫比乌斯函数是 积性函数 :
μ ( a ∗ b ) = μ ( a ) ∗ μ ( b ) g c d ( a , b ) = 1 \mu(a*b)=\mu(a)*\mu(b)\ \ \ \ \ \ \ gcd(a,b)=1 μ(a∗b)=μ(a)∗μ(b) gcd(a,b)=1
根据这个性质, 可以 O ( N ) O(N) O(N) 进行 线性筛,
-
若当前数字 i i i 为质数, μ ( i ) = − 1 \mu(i)=-1 μ(i)=−1,
-
若 i % p j = = 0 i\%p_j\ == 0 i%pj ==0, 说明 i ∗ p j i*p_j i∗pj 已经含有幂数大于 1 1 1的质因子, 所以 μ ( i ∗ p j ) = 0 \mu(i*p_j)=0 μ(i∗pj)=0,
-
否则说明 i i i 的质因子与 p j p_j pj 共同构成 i ∗ p j i*p_j i∗pj的质因子,
于是 μ ( i