Давайте создадим N × N сетку пробелов и подчеркиваний, которые можно использовать для визуального определения, является ли число простым числом. (N может быть любым положительным целым числом.)
Эта сетка имеет три простых правила:
- N-й столбец содержит повторяющиеся символы n - 1 подчеркивания, за которыми следует один пробел. Этот шаблон начинается в первой строке и останавливается, возможно, в середине шаблона в строке N. (Строки и столбцы индексируются 1).
- Первый столбец заменяется всеми подчеркиваниями вместо пробелов.
- Если где-то появляется пробел, индекс строки равен индексу столбца, он заменяется подчеркиванием.
Пример: N = 10
1
1234567890 <-- column indices
1__________
2__________
3__________
4_ ________
5__________
6_ _______
7__________
8_ _ ______
9__ _______
10_ __ _____
^ row indices
Индексы только для ясности. Сама простая сетка (что должна вывести ваша программа):
__________
__________
__________
_ ________
__________
_ _______
__________
_ _ ______
__ _______
_ __ _____
Заметить, что:
- Первый столбец подчеркивания.
- Второй столбец идет с подчеркиванием, подчеркиванием и т. Д., За исключением подчеркивания в строке 2.
- В третьем столбце подчеркивание подчеркивается пробелом, подчеркивание подчеркивается пробелом и т. Д., За исключением подчеркивания в строке 3.
- и т.п.
Также обратите внимание, что кроме 1, только простые пронумерованные строки имеют подчеркивания в каждом столбце.
Поскольку подчеркивания охватывают всю ширину шрифта, каждая строка с простыми номерами образует непрерывную сплошную линию. Так что проверить, является ли число простым или нет, визуально довольно просто; просто проверьте, является ли его линия сплошной по всем столбцам. (На самом деле достаточно взглянуть на квадратный корень индекса строки, но вывод этой сетки кажется менее элегантным.)
программа
Напишите программу, которая будет рисовать эти сетки с заданным N через стандартный ввод (или ближайшую альтернативу). Выходные данные отправляются на стандартный вывод (или ближайшую альтернативу) и должны содержать только пробелы, подчеркивания и новые строки с необязательным завершающим символом новой строки.
Самый короткий код выигрывает.
n
строке th сделайте k
символ th пробелом, если k
его делитель m
не равен 1 или m
.