Étant donné un nombre entier positif n
, concevez un rapporteur avec le moins de marques qui vous permet de mesurer tous les angles qui sont un multiple entier de 2π/n
(chacun dans une seule mesure).
Détails
En sortie, vous pouvez sortir une liste d'entiers dans la plage 0
à n-1
(ou 1
à n
) qui représentent la position de chaque marque. Alternativement, vous pouvez sortir une chaîne / liste de longueur n
avec un #
à la position de chaque marque et un _
(trait de soulignement) là où il n'y en a pas. (Ou deux caractères différents si cela vous convient plus.)
Exemple: Pour n = 5
vous avez besoin exactement de 3 marques pour pouvoir mesurer tous les angles 2π/5, 4π/5, 6π/5, 8π/5, 2π
en définissant (par exemple) une marque à 0
, une marque à 2π/5
et une marque à 6π/5
. Nous pouvons coder cela sous forme de liste [0,1,3]
ou de chaîne ##_#_
.
Exemples
Notez que les sorties ne sont pas nécessairement uniques.
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: Ceci est similaire au problème de la règle clairsemée , mais au lieu d'une échelle linéaire (avec deux extrémités), nous considérons une échelle circulaire (angulaire).
PPS: ce script doit calculer un exemple d'un ensemble de marques pour chacun n
. Essayez-le en ligne!
PPPS: Comme l'a souligné @ngn, ce problème équivaut à trouver une base de différence minimale d'un groupe cyclique d'ordre n
. Les commandes minimales sont répertoriées dans http://oeis.org/A283297 et certaines limites théoriques se trouvent dans https://arxiv.org/pdf/1702.02631.pdf