Ну вот что-то такое вырисовывается, надо будет ещё проверить.
Пусть имеется
фальшивых монет. Способ работает при
. Представим количество монет в виде
, где
Отложим в сторону кучку в
монет, с остальными перейдём к начальному шагу.
Начальный шаг. Если есть кучка A, о которой известно, что в ней не более
фальшивых, делим её пополам на B и C и сравниваем.
1. =. В любой из B и C не более
фальшивых.
1.1. Если
в кучке A все монеты настоящие. Смотрим на результат сравнения с первой надкучкой выше по цепочке сравнений, где было неравенство. Если везде равенство, надо сравнивать с остатком.
1.2. Если
берём кучку B и переходим к начальному шагу.
2. <>. Разделим кучку B пополам и сравним.
2.1. =. Действуем аналогично п. 1.
2.2. <>. В кучке B есть фальшивые. Значит, в кучке C их не более, чем
(0, если
). Если
или
, результат известен. Иначе берём кучку C и переходим к начальному шагу.
Если не ошибаюсь, общее количество сравнений не превысит