Vamos criar uma grade N × N de espaços e sublinhados que podem ser usados para determinar visualmente se um número é primo. (N pode ser qualquer número inteiro positivo.)
Essa grade possui três regras simples:
- A enésima coluna contém o padrão repetido de n - 1 sublinhados seguido por um espaço. Esse padrão inicia na primeira linha e é interrompido, possivelmente no meio do padrão, na linha N. (Linhas e colunas são indexadas 1).
- A primeira coluna é substituída por todos os sublinhados em vez de todos os espaços.
- Se ocorrer um espaço em algum lugar, o índice da linha é igual ao índice da coluna, sendo substituído por um sublinhado.
Exemplo: N = 10
1
1234567890 <-- column indices
1__________
2__________
3__________
4_ ________
5__________
6_ _______
7__________
8_ _ ______
9__ _______
10_ __ _____
^ row indices
Os índices são apenas para maior clareza. A grade simples (o que seu programa deve gerar) é:
__________
__________
__________
_ ________
__________
_ _______
__________
_ _ ______
__ _______
_ __ _____
Notar que:
- A primeira coluna é todos os sublinhados.
- A segunda coluna coloca espaço sublinhado, espaço sublinhado, etc., exceto o sublinhado na linha 2.
- A terceira coluna apresenta sublinhado, espaço sublinhado, espaço sublinhado, etc., exceto o sublinhado na linha 3.
- etc.
Observe também que, além de 1, apenas as linhas com números primos têm sublinhados em todas as colunas.
Como os sublinhados abrangem toda a largura da fonte, cada linha numerada principal forma uma linha contínua e sólida. Portanto, verificar se um número é primo ou não é bastante fácil visualmente; basta verificar se sua linha é sólida em todas as colunas. (De fato, basta olhar para a raiz quadrada do índice de linha, mas produzir essa grade parece menos elegante.)
Programa
Escreva um programa que desenhe essas grades dadas N via stdin (ou alternativa mais próxima). A saída vai para stdout (ou alternativa mais próxima) e deve conter apenas espaços, sublinhados e novas linhas, com uma nova linha à direita opcional.
O código mais curto vence.
n
linha th, torne o k
th caractere um espaço se k
for um divisor m
que não seja 1 ou m
.