introduction
Vous pouvez ignorer cette partie si vous savez déjà ce qu'est un groupe cyclique.
Un groupe est défini par un ensemble et une opération binaire associative $
(c'est-à-dire (a $ b) $ c = a $ (b $ c)
. Il existe exactement un élément dans le groupe e
où a $ e = a = e $ a
pour tous a
dans le groupe ( identité ). Pour chaque élément a
du groupe, il en existe exactement un b
tel que a $ b = e = b $ a
( inverse ) Pour tous les deux éléments a, b
du groupe, a $ b
est dans le groupe ( fermeture ).
Nous pouvons écrire a^n
à la place de a$a$a$...$a
.
Le sous-groupe cyclique généré par n'importe quel élément a
du groupe est <a> = {e, a, a^2, a^3, a^4, ..., a^(n-1)}
où n
est l'ordre (taille) du sous-groupe (sauf si le sous-groupe est infini).
Un groupe est cyclique s'il peut être généré par l'un de ses éléments.
Défi
Étant donné la table Cayley (tableau des produits) pour un groupe fini, déterminez si elle est cyclique ou non.
Exemple
Jetons un coup d'œil au tableau Cayley suivant:
1 2 3 4 5 6
2 3 1 6 4 5
3 1 2 5 6 4
4 5 6 1 2 3
5 6 4 3 1 2
6 4 5 2 3 1
(Il s'agit du tableau de Cayley pour le groupe dièdre 3, D_3).
Ceci est indexé sur 1, donc si nous voulons trouver la valeur de 5 $ 3
, nous regardons dans la cinquième colonne de la troisième ligne (notez que l'opérateur n'est pas nécessairement commutatif, donc 5 $ 3
n'est pas nécessairement égal à 3 $ 5
. Nous voyons ici que 5 $ 3 = 6
(aussi que 3 $ 5 = 4
).
On peut trouver <3>
en commençant par [3]
, puis alors que la liste est unique, ajouter le produit du dernier élément et le générateur (3). Nous obtenons [3, 3 $ 3 = 2, 2 $ 3 = 1, 1 $ 3 = 3]
. Nous nous arrêtons ici avec le sous-groupe {3, 2, 1}
.
Si vous calculez à <1>
travers <6>
vous verrez qu'aucun des éléments du groupe génèrent tout le groupe. Ainsi, ce groupe n'est pas cyclique.
Cas de test
L'entrée sera donnée sous forme de matrice, la sortie sous forme de valeur de décision véridique / fausse.
[[1,2,3,4,5,6],[2,3,1,6,4,5],[3,1,2,5,6,4],[4,5,6,1,2,3],[5,6,4,3,1,2],[6,4,5,2,3,1]] -> False (D_3)
[[1]] -> True ({e})
[[1,2,3,4],[2,3,4,1],[3,4,1,2],[4,1,2,3]] -> True ({1, i, -1, -i})
[[3,2,4,1],[2,4,1,3],[4,1,3,2],[1,3,2,4]] -> True ({-1, i, -i, 1})
[[1,2],[2,1]] -> True ({e, a} with a^-1=a)
[[1,2,3,4,5,6,7,8],[2,3,4,1,6,7,8,5],[3,4,1,2,7,8,5,6],[4,1,2,3,8,5,6,7],[5,8,7,6,1,4,3,2],[6,5,8,7,2,1,4,3],[7,6,5,8,3,2,1,4],[8,7,6,5,4,3,2,1]] -> False (D_4)
[[1,2,3,4,5,6],[2,1,4,3,6,5],[3,4,5,6,1,2],[4,3,6,5,2,1],[5,6,1,2,3,4],[6,5,2,1,4,3]] -> True (product of cyclic subgroups of order 2 and 3, thanks to Zgarb)
[[1,2,3,4],[2,1,4,3],[3,4,1,2],[4,3,1,2]] -> False (Abelian but not cyclic; thanks to xnor)
Vous serez assuré que l'entrée est toujours un groupe.
Vous pouvez prendre l'entrée comme des valeurs indexées 0.
la source
[[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2]]
)?[1..n]
ce qui peut cacher des défauts dans certaines réponses.Réponses:
J , 8 octets
Essayez-le en ligne!
Explication
la source
1 e.#@C.
, fwiwŒCL€1e
6 octets dans Jelly.Husk ,
11 109 octets1 basé. Renvoie l'index d'un générateur s'il existe, 0 sinon. Essayez-le en ligne!
Explication
la source
Gelée ,
1311 octetsEssayez-le en ligne!
la source
JavaScript (ES6), 52 octets
la source
Python 2 ,
969197 octetsEssayez-le en ligne!
la source
or 1+g
->or-~g
.Gelée , 15 octets
Essayez-le en ligne!
Première idée idiote qui m'est venue à l'esprit: vérifier l'isomorphisme de Z n . (Ce code est O (n!)…)
la source
R ,
10197 octetsVérifier tous les cas de test
Cela calcule simplement
<g>
pour chacung \in G
, puis teste siG \subseteq <g>
, puis vérifie si certains d'entre eux sont vrais. Cependant, puisque nous appliquons toujours$g
à droite, nous répliquonsm[g,]
(lag
troisième ligne) puis indexons dans cette ligne avec le résultat de l'application$g
, en accumulant les résultats plutôt qu'en les utilisant àm[g,g$g]
chaque fois, ce qui a permis d'économiser environ 4 octets.la source
Clojure, 68 octets
la source
Python 2 , 82 octets
Essayez-le en ligne!
La table Cayley indexée 0 est entrée; Sortie vrai / faux pour le groupe cyclique / non cyclique.
la source