Створимо сітку 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 через stdin (або найближчу альтернативу). Вихідні дані переходять до stdout (або найближчої альтернативи) і повинні містити лише пробіли, підкреслення та нові рядки з необов'язковим зворотним новим рядком.
Виграє найкоротший код.
n
рядка зробіть k
символом th пробіл, якщо k
дільник на m
це не 1 або m
.