позволяет добавить оператор печати в самый внутренний цикл.
for (int j =1; j < n; j *= 2){
for (int k =0; k < j; k++){
print(1)
}
}
выход для
j = 1
, 1 1
j = 2
, 1 1 1
j = 4
, 1 1 1 1 1
...
j = n
, 1 1 1 1 1 ...
n+1
раз.
Вопрос сводится к тому, сколько 1
с будет напечатано.
Это число
(2^0 + 1) + (2^1 + 1) + (2^2 + 1) + ... + (n + 1)
= (2^0 + 1) + (2^1 + 1) + (2^2 + 1) + ... + (n + 1)
= log n + (1 + 2 + 4 + ... + n)
= O(log n + n)
= O(n)
.
, если вы знаете, почему (1 + 2 + 4 + ... + n) = O(n)