1行スクリプトでの結果が以下。
$ time perl -le 'for(1..1500014){$s="";$s.="Fizz" if !($_%3);$s.="Bizz" if !($_%5);$s=$_ if !$s;print $s}' | tail Bizz Fizz 1500007 1500008 Fizz Bizz 1500011 Fizz 1500013 1500014 real 0m2.844s user 0m2.812s sys 0m0.028s
ルックアップテーブルと二重ループを使った場合の結果が以下。mod計算はなくなったけど、総時間は増えている。
$ cat fizz_buzz.pl #!/usr/bin/perl -l use strict; use warnings; my @s = ('FizzBizz', '', '', 'Fizz', '', 'Buzz', 'Fizz', '', '', 'Fizz', 'Buzz', '', 'Fizz', '', '', ''); my $n = 0; for (0..100000) { for (0..14) { my $s = $s[$_]; print $s?$s:$n; $n++; } } $ time perl fizz_buzz.pl | tail Buzz Fizz 1500007 1500008 Fizz Buzz 1500011 Fizz 1500013 1500014 real 0m3.634s user 0m3.588s sys 0m0.044s
結局シンプルな計算が一番ってことですか?