遠眼鏡屋2

素数の書き出し、C言語の場合

前回記事のあと興にのって、C言語ではどうなるか実験してみた。
◎sosuu3.c

#include <stdio.h>
#include <time.h>

int main(void){
int i, j;
char *p;
clock_t t1, t2, tt;
t1 = clock();

i = 2;
while( i < 50000){
j = 2;
p = "t";
while( j < i ){
if( i % j == 0){
p = "f";
break;
}
j = j + 1;
}
if( p == "t"){
printf("%d ", i);
}
i = i + 1;
}

t2 = clock();
tt = t2 - t1;
printf("\n\n\n");
printf("処理時間:%f秒\n", (double) tt / CLOCKS_PER_SEC);

return 0;
}

上記を >gcc -o sosuu3.exe sosuu3.c で実行ファイルにして
>sosuu3.exe で結果をみると、処理時間は3秒強と意外にかかる。これは多分 Windowsコマンドプロンプトの遅さによるのであろう。
そこで今度は上記プログラムを cgi用に書き換えてみる。
◎sosuu4.c
#include <stdio.h>
#include <time.h>

int main(void){
int i, j;
char *p;
clock_t t1, t2, tt;

t1 = clock();
printf("Content-type: text/html\n\n");
printf("<html>\n");
printf("<head>\n");
printf("<title></title>\n");
printf("</head>\n");
printf("<body>\n");
printf("<br>\n");

i = 2;
while( i < 50000){
j = 2;
p = "t";
while( j < i ){
if( i % j == 0){
p = "f";
break;
}
j = j + 1;
}
if( p == "t"){
printf("%d ", i);
}
i = i + 1;
}

t2 = clock();
tt = t2 - t1;
printf("<br><br>\n");
printf("処理時間:%f秒\n", (double) tt / CLOCKS_PER_SEC);

printf("</body>\n");
printf("</html>\n");

return 0;
}

これを >gcc -o sosuu4.cgi sosuu4.c として、
chrome (Windows7) のアドレス欄に
http://localhost/sosuu4.cgi エンターすると、
処理時間 0.6秒ほどで素数一覧表がブラウザ上に並ぶ。

前回、今回の実験を総合すると、
一番速いのは、C言語のcgi(約0.6秒)、二番目はjavascriptのHTML(約0.8秒)、三番目はC言語のコマンドプロンプト版(約3秒)、四番目は php(約6秒) となった。
javascript の優秀さとウェブブラウザの表示の速さが印象に残る。