Biorąc pod uwagę pewną dodatnią liczbę całkowitą n
, zaprojektuj kątomierz z najmniejszą liczbą znaczników, która pozwoli ci zmierzyć wszystkie kąty, które są integralną wielokrotnością 2π/n
(każdy w jednym pomiarze).
Detale
Jako wynik możesz wypisać listę liczb całkowitych z zakresu 0
do n-1
(lub 1
do n
), które reprezentują pozycję każdego znaku. Alternatywnie możesz wypisać ciąg / listę długości n
ze znakiem #
w pozycji każdego znaku i _
(podkreślenie) tam, gdzie go nie ma. (Lub dwa różne znaki, jeśli jest to wygodniejsze.)
Przykład: Aby n = 5
dokładnie zmierzyć wszystkie kąty, potrzebujesz dokładnie 3 znaków, 2π/5, 4π/5, 6π/5, 8π/5, 2π
ustawiając (na przykład) jeden znak o 0
, jeden znak o 2π/5
i jeden znak o 6π/5
. Możemy zakodować to jako listę [0,1,3]
lub ciąg znaków ##_#_
.
Przykłady
Zauważ, że wyniki niekoniecznie są unikalne.
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: Jest to podobne do problemu rzadkiej linijki , ale zamiast skali liniowej (z dwoma końcami) rozważamy skalę kołową (kątową).
PPS: Ten skrypt powinien obliczyć jeden przykład zestawu znaków dla każdego n
. Wypróbuj online!
PPPS: Jak wskazał @ngn, ten problem jest równoważny ze znalezieniem podstawy minimalnej różnicy w cyklicznej grupie zamówień n
. Minimalne zamówienia są wymienione w http://oeis.org/A283297, a niektóre teoretyczne granice znajdują się w https://arxiv.org/pdf/1702.02631.pdf