[1606] prime.milについて
投稿者:yuya
2010/07/29 10:00:34
日経ソフトウエア8月号「MIL」の記事を読んでいます。
本編に進む前に、p18のprime.milでつまづいてしまいました。
かなり時間をかけて、「確かにこれで素数は求まる」ことは納得したのですが、
それでも疑問がたくさん残ります。
たとえば、c を number / 2 まで回すのなら分かりますが、
小さな number に対しても一律 HALF_OF_MAX まで回す必要があるのでしょうか?
はじめ、ソースが複雑なのは言語の仕様を切り詰めているせいかと思いましたが、
自分で書いてみるとこうなりました。
MAX = 1000;
number_of_prime = 0;
number = 2; while(number <= MAX){
i = 2; while(i < number){ # 2 から number - 1 の範囲の整数で
if(number / i * i == number){ # 割り切れたら
goto *exit; # 素数ではない
}
i = i + 1;
}
print(number);
number_of_prime = number_of_prime + 1;
*exit
number = number + 1;
}
print("the number of prime is");
print(number_of_prime);
書いたあとで再度p18のソースを見ると、
必要以上の複雑さがかなり含まれていると感じました。
(ぱ)さんの記事はいつも日本語が驚異的に分かりやすいので、
ソースにも同じくらいの分かりやすさを無意識に要求してしまっているのかもしれません。
読者のわがままというものですが……。