数値が素数かどうかを視覚的に判断するために使用できるスペースとアンダースコアのN×Nグリッドを作成しましょう。(Nは任意の正の整数です。)
このグリッドには3つの単純なルールがあります。
- n番目の列には、n-1個のアンダースコアと1つのスペースの繰り返しパターンが含まれます。このパターンは最初の行から始まり、場合によっては行Nで途中で停止します(行と列には1インデックスが付けられます)。
- 最初の列は、すべてのスペースではなく、すべての下線に置き換えられます。
- 行インデックスが列インデックスと等しい場所にスペースが発生すると、アンダースコアに置き換えられます。
例:N = 10
1
1234567890 <-- column indices
1__________
2__________
3__________
4_ ________
5__________
6_ _______
7__________
8_ _ ______
9__ _______
10_ __ _____
^ row indices
インデックスはわかりやすくするためのものです。プレーングリッド自体(プログラムが出力する必要があるもの)は次のとおりです。
__________
__________
__________
_ ________
__________
_ _______
__________
_ _ ______
__ _______
_ __ _____
次のことに注意してください。
- 最初の列はすべてアンダースコアです。
- 2番目の列は、行2の下線を除き、下線スペース、下線スペースなどになります。
- 3番目の列は、行3の下線を除き、下線下線スペース、下線下線スペースなどになります。
- 等
また、1に加えて、すべての列にアンダースコアがあるのは素数の行だけです。
アンダースコアはフォント幅全体に及ぶため、各素数の行は連続した実線を形成します。したがって、数値が素数であるかどうかを確認することは視覚的に非常に簡単です。その行がすべての列で実線であるかどうかを確認します。(実際、行インデックスの平方根を検索するだけで十分ですが、そのグリッドを出力することはそれほどエレガントではないようです。)
プログラム
Nを指定したstdin(または最も近い代替)でこれらのグリッドを描画するプログラムを作成します。出力はstdout(または最も近い代替)に送られ、スペース、アンダースコア、および改行のみを含む必要があり、オプションで末尾の改行が含まれます。
最短のコードが優先されます。
n
番目の行については、その除数が1またはでないk
場合、th文字をスペースにします。k
m
m