Введение

В информатике и математике, проблема Иосифа (или перестановка Иосифа) — это теоретическая задача, связанная с определённой игрой с выбыванием. Такие игры используются для выбора человека из группы, например, игра «эни, мини, майни, мо». [[Файл:JosephusProblemDrawing.png|thumb|right|Иллюстрация последовательности решения задачи Иосифа для 500 человек с шагом выбывания 6. Горизонтальная ось — номер человека. Вертикальная ось (сверху вниз) — время (номер цикла). Живой человек изображён зелёным цветом, выбывший — чёрным. Но сохранившийся славянский манускрипт Иосифа рассказывает другую историю: он «хитро подсчитывал номера и таким образом сумел обмануть всех остальных». У Иосифа был сообщник; задача заключалась в том, чтобы определить места двух последних выживших (чей сговор обеспечил бы их спасение). Утверждается, что он поместил себя и другого человека на 31-е и 16-е места соответственно (для k = 3, указанного ниже).

Решение

thumb|link=|Предпоследнее (розовое) и конечное (ультрамариновое) места в задаче Иосифа для различных размеров группы, n, и шага, k. В [SVG-файле] наведите курсор на значения, чтобы увидеть полный порядок устранения. Далее, обозначает количество людей в исходном круге, а – счетчик для каждого шага, то есть, людей пропускают, и -й человек исключается. Люди в круге пронумерованы от до , начальная позиция – , а счет ведется включительно.

Битовый

Самый простой способ найти безопасную позицию — использовать побитовые операторы. В этом подходе сдвиг самого старшего установленного бита числа n в самый младший бит вернет безопасную позицию.