すのものの「いろいろ」(その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