すのものの「いろいろ」(その178)

続・modulo m での“かけ算九九”の表に現れる濃淡の模様について

前項の続き。色の濃淡で、table を使って書くようにしたのが次である。

#include <stdio.h>
#include <stdlib.h>

main(int argc, char* argv[]) {
    int i, j, m;

    if (argc != 2) {
        return 1;
    }
    m = atoi(argv[1]);

    puts("<html><body>");
    puts("<table>");
    for (i = 1; i < m; i++) {
        puts("<tr>");
        for (j = 1; j < m; j++) {
            int n = i * j % m * (255 / (m - 1));

            printf("<td bgcolor=\"#%02x%02x%02x\">", n, n, n);
            if (i == j) {
                printf("<font color=\"#%02x%02x%02x\">々</font>", n, n, n);
            } else {
                printf("&nbsp;");
            }
            puts("</td>");
        }
        puts("</tr>");
    }
    puts("</table>");
}

引数を「24」とすると次が出力される。

                                           
                                           
                                           
                                           
                                           
                                           
                                           
                                           
                                           
                                           
                                           
                                           
                                           
                                           
                                           
                                           
                                           
                                           
                                           
                                           
                                           
                                           
                                           

m を 48 にしたのが次。何やら不思議な模様が浮かびあがっている。

                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           
                                                                                           

付) 文字数を少なくするため、本当に文字がはいっているのは対角線のみとし、 あとは &nbsp; を入れている。 if (i == j) が文字をいれるかどうかの分岐だが、 m が素数の場合に限るなら if (i * j % m == 1) としてもよい。 m が 17 のとき

                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
                             
となり、m が 16 のとき
                           
                             
                           
                             
                           
                             
                           
                             
                           
                             
                           
                             
                           
                             
                           
となる。(文字は白で表示されるように改変してある。)

2008-02-03 (0) 23:17:38 +0900


すのもの Sunomono