なに前哨戦とな?
キミならどう書く 2.0 - ROUND 1 - ? Lightweight Language Ringお題は「100までの整数から素数を列挙せよ」です.
まずはCPANから。Perlから、と言わないところがミソ。
perl -MMath::Prime::XS=primes -le '$,=" "; print primes(100)'
primesをsieve_primesとするとさらに高速。$,の使い方にも注目。
次にabigailの傑作の変種。
perl -le '$,=" "; print grep { (1 x $_) !~ /^(11+)\1+$/ } (2..100)'
なんでこれで素数判定できるかは、読者の宿題。
最後に、割とけれんみのない実装。なるべくPerlっぽくしてみた。
use strict; use warnings; my @primes; sub is_prime{ my $n = shift; for my $d (@primes){ last if $d*$d > $n; return unless $n % $d; } push @primes, $n; return $n; } my $max = shift || 100; is_prime($_) for (2 .. $max); print join(" ", @primes), "\n"; __END__革命の日々! カーネル読書会で発表してきました
57は素数ですが何か?
kosakiさんの傷に塩をすり込むテスト。
% perl primes.pl | grep 57 % perl primes.pl | grep 97 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 %
ん、まてよ、ひょっとしてoctal?
% perl -le 'print 057' 47 % perl primes.pl | grep `perl -le 'print 057'` 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 %
塩を塗るつもりが塩を送ってしまった。
Dan the Prime Perl Monger
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。