Пусть F (n) — число разрезов для числа n. F (1) = 0. Заметим, что F(2ˆk) = k, потому что можно k раз совмещать все рулеты и резать их пополам. Также заметим, что F (n) < F (n + 1), потому что разрезание рулета на n частей-подзадача от разрезания рулета на n + 1 часть. Кроме того, заметим, что за k разрезов можно получить не больше, чем 2ˆk кусков. Совместив полученные знания, получаем, что для n ∈ (2ˆ(k−1);2ˆk] ответом будет число k. Значит, нужно найти старший бит числа n, что можно сделать с помощью цикла, в котором n будет итеративно делиться на два. Число итераций и будет ответом.