Utwórzmy siatkę N × N spacji i znaków podkreślenia, których można użyć do wizualnego ustalenia, czy liczba jest liczbą pierwszą. (N może być dowolną liczbą całkowitą dodatnią).
Ta siatka ma trzy proste zasady:
- N-ta kolumna zawiera powtarzający się wzór n-1 znaków podkreślenia, po których następuje jedna spacja. Ten wzorzec zaczyna się w pierwszym rzędzie i jest zatrzymany, być może w połowie wzorca, w rzędzie N. (Rzędy i kolumny mają indeks 1).
- Pierwsza kolumna zostaje zastąpiona wszystkimi znakami podkreślenia zamiast wszystkich spacji.
- Jeśli gdzieś występuje spacja, indeks wiersza jest równy indeksowi kolumny, zostaje on zastąpiony znakiem podkreślenia.
Przykład: N = 10
1
1234567890 <-- column indices
1__________
2__________
3__________
4_ ________
5__________
6_ _______
7__________
8_ _ ______
9__ _______
10_ __ _____
^ row indices
Wskaźniki służą wyłącznie przejrzystości. Sama zwykła siatka (co program musi wypisać) to:
__________
__________
__________
_ ________
__________
_ _______
__________
_ _ ______
__ _______
_ __ _____
Zauważ, że:
- Pierwsza kolumna to wszystkie podkreślenia.
- Druga kolumna to spacja podkreślenia, spacja podkreślenia itp., Z wyjątkiem podkreślenia w wierszu 2.
- Trzecia kolumna zawiera znak podkreślenia, znak podkreślenia itp., Z wyjątkiem podkreślenia w wierszu 3.
- itp.
Zauważ również, że oprócz 1 tylko wiersze z liczbami pierwszymi mają podkreślenia w każdej kolumnie.
Ponieważ podkreślenia obejmują całą szerokość czcionki, każdy wiersz z liczbą pierwszą tworzy ciągłą ciągłą linię. Zatem sprawdzenie, czy liczba jest liczbą pierwszą, czy nie, jest dość łatwe wizualnie; po prostu sprawdź, czy jego linia jest ciągła we wszystkich kolumnach. (W rzeczywistości wystarczy spojrzeć na pierwiastek kwadratowy z indeksu wierszy, ale generowanie siatki wydaje się mniej eleganckie).
Program
Napisz program, który narysuje te siatki, otrzymując N poprzez stdin (lub najbliższą alternatywę). Dane wyjściowe są kierowane na standardowe wyjście (lub najbliższą alternatywę) i powinny zawierać tylko spacje, podkreślenia i znaki nowej linii, z opcjonalnym znakiem końca linii.
Najkrótszy kod wygrywa.
nwierszu th zmień kznak th na spację, jeśli kjest dzielnikiem, mktóry nie jest równy 1 lub m.
