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がよろしくやってくれる寸法。

いやぁ、我ながら冗長っすね。