Créons une grille N × N d'espaces et de traits de soulignement qui peuvent être utilisés pour déterminer visuellement si un nombre est premier. (N peut être n'importe quel entier positif.)
Cette grille a trois règles simples:
- La nième colonne contient le motif répété de n - 1 traits de soulignement suivis d'un espace. Ce modèle commence à la première ligne et est arrêté, peut-être au milieu du modèle, à la ligne N. (Les lignes et les colonnes sont indexées sur 1.)
- La première colonne est remplacée par tous les traits de soulignement au lieu de tous les espaces.
- Si un espace apparaît quelque part, l'index de ligne est égal à l'index de colonne, il est remplacé par un trait de soulignement.
Exemple: N = 10
1
1234567890 <-- column indices
1__________
2__________
3__________
4_ ________
5__________
6_ _______
7__________
8_ _ ______
9__ _______
10_ __ _____
^ row indices
Les indices sont juste pour la clarté. La grille simple elle-même (ce que votre programme doit produire) est:
__________
__________
__________
_ ________
__________
_ _______
__________
_ _ ______
__ _______
_ __ _____
Remarquerez que:
- La première colonne est entièrement soulignée.
- La deuxième colonne contient l'espace de soulignement, l'espace de soulignement, etc., à l'exception du trait de soulignement de la ligne 2.
- La troisième colonne contient l'espace de soulignement, l'espace de soulignement, etc., à l'exception du trait de soulignement de la ligne 3.
- etc.
Notez également qu'en dehors de 1, seules les lignes numérotées principales ont des traits de soulignement dans chaque colonne.
Étant donné que les traits de soulignement couvrent toute la largeur de la police, chaque ligne numérotée principale forme une ligne continue continue. Donc, vérifier si un nombre est premier ou non est assez facile visuellement; vérifiez simplement si sa ligne est solide sur toutes les colonnes. (En fait, la recherche de la racine carrée de l'index de ligne suffit mais la sortie de cette grille semble moins élégante.)
Programme
Écrivez un programme qui dessinera ces grilles étant donné N via stdin (ou l'alternative la plus proche). La sortie va vers stdout (ou l'alternative la plus proche) et ne doit contenir que des espaces, des traits de soulignement et des retours à la ligne, avec un retour à la ligne facultatif.
Le code le plus court gagne.
n
e ligne, faites du k
th caractère un espace si k
est un diviseur m
qui n'est pas 1 ou m
.