ここに掲載されているリストを出力するプログラムを、自分も作ってみました。
#include
int main(void) {
int y,m,d;
const int dmax[12]={31,28,31,30,31,30,31,31,30,31,30,31};
y=2013;
for(m=1;m0) {
printf(" = 2");
if(count>1)printf("^%d",count);
equalprinted=1;
}
for(i=3;i*i0) {
printf(" %c %d",equalprinted?'*':'=',i);
if(count>1)printf("^%d",count);
equalprinted=1;
}
}
if(!equalprinted) {
printf(": 素数");
} else if(now2>1) {
printf(" * %d",now2);
}
putchar('\n');
}
}
return 0;
}
実行すると、1秒程度でリストを出力できました。
最初のサイトでは、2時間程度かかるそうなので、効率が悪すぎることがわかります。
なぜこのようなことになってしまうのでしょうか。
最近のコンピュータでは、1秒あたりだいたい10,000,000回の計算をできると見積もれます。[要出典]
最初のサイトのプログラムのループ回数を計算してみると、
だいたい365*20,140,000=7,351,100,000となります。
7,351,100,000÷10,000,000=735.11となり、約12分で計算できるということになります…あれ?
見積もりが間違っていたか、もしくはPerlの遅さであると推測できます。