Учитывая некоторое положительное целое число n
, создайте транспортир с наименьшим количеством меток, который позволит вам измерить все углы, кратные целому числу 2π/n
(каждое в одном измерении).
Детали
В качестве вывода, вы можете вывести список целых чисел в диапазоне 0
от n-1
(или 1
к n
) , которые представляют позицию каждого знака. В качестве альтернативы вы можете вывести строку / список длины n
с a #
в позиции каждой метки и a _
(подчеркивание) там, где ее нет. (Или два разных символов , если более удобно.)
Пример: Для n = 5
вас нужно точно 3 балла , чтобы быть в состоянии измерить все углы 2π/5, 4π/5, 6π/5, 8π/5, 2π
, установив (например) одной метки 0
, одной метки 2π/5
и одной метки 6π/5
. Мы можем закодировать это как список [0,1,3]
или как строку ##_#_
.
Примеры
Обратите внимание, что выходные данные не обязательно являются уникальными.
n: output:
1 [0]
2 [0,1]
3 [0,1]
4 [0,1,2]
5 [0,1,2]
6 [0,1,3]
7 [0,1,3]
8 [0,1,2,4]
9 [0,1,3,4]
10 [0,1,3,6]
11 [0,1,3,8]
20 [0,1,2,3,6,10]
PS: Это похоже на проблему разреженной линейки , но вместо линейной шкалы (с двумя концами) мы рассматриваем круговую (угловую) шкалу.
PPS: этот скрипт должен вычислять один пример набора меток для каждого n
. Попробуйте онлайн!
PPPS: Как отметил @ngn, эта проблема эквивалентна нахождению минимальной разностной базы циклической группы порядка n
. Минимальные заказы перечислены в http://oeis.org/A283297, а некоторые теоретические границы приведены в https://arxiv.org/pdf/1702.02631.pdf.