PHPな応募ないすね
キミならどう書く 2.0 - ROUND 1 - — Lightweight Language Ring
でPHPな応募がない件について。(TB全部見てないので、もしあったらごめんなさい)
ということでいっちょ書いてみました。
アルゴリズムに凝るのは苦手だし、ワンライナーは端からPHPに向いてないのであきらめることにして…、PHP5で入ったSPLからIteratorとか使ってみましょうかね。
<?php class PrimeIterator extends FilterIterator { public function __construct($it) { parent::__construct($it); } public function accept() { $v = $this->current(); $divisor = 0; for ($i = 1; $i < $v; ++$i) { if ((($v % $i) == 0) && (++$divisor >= 2)) { return false; } } return true; } } $i = new PrimeIterator(new ArrayIterator(range(2, 100))); foreach ($i as $num) { echo $num . ' '; } ?>
PrimeIterator::accept() メソッドで素数かどうかの判別をしています。あとはFilterIteratorがよろしくやってくれる寸法。
いやぁ、我ながら冗長っすね。