我不太明白如何将这个转化为公式。
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= N; j += i) {
我理解的是,每次 i++ 都会使 j 的乘法层数减少1。
当 i = 1 时,j 取值范围为 1, 2, 3, ..., 100。 当 i = 2 时,j 取值范围为 1, 3, 5, ..., 100。
我不确定如何用大O符号来表示这个关系。
j 的总和可以表示为 N, N/2, N/3, N/4..., N/N (我的结论)。
如何将其表示为 N 的函数呢?
log N
(你可以把它看作连续求和而不是离散求和,注意到1/N
的积分是log N
)。 - justhalfN
)_是_整个算法的大O符号。请注意,对于没有第一个循环的第二个循环,大O符号将固定为N/i
。 - justhalf