Цикл while
равен O(log m)
, поскольку вы продолжаете делить m
на 3
до тех пор, пока оно не станет ниже или равно 100
.
Поскольку в вашем случае 100 - это константа, ее можно игнорировать, да.
Внутренний цикл равен O(log n)
, как вы сказали, потому что вы умножаете j
на 2
, пока он не превысит n
.
Следовательно, общая сложность составляет O(log n + log m)
.
или арифметические операции, не имеет значения, в каком масштабе, считаются базовыми операциями и могут быть опущены?
Арифметические операции обычно можно опустить, да. Однако это также зависит от языка. Это похоже на Java и похоже, что вы используете примитивные типы. В этом случае можно считать арифметические операции O(1)
да. Но если вы используете, например, большие целые числа, это уже не совсем нормально, так как сложение и умножение больше не O(1)
.