1000以下の回文素数で最大のものを示す
示してみる。
(use '[clojure.contrib.lazy-seqs :only (primes)]) (defn palindromic-number? [n] (let [v (vec (str n))] (= v (reverse v)))) (defn last-palindromic-prime-number [limit] (->> primes (take-while (partial > limit)) (filter palindromic-number?) last))
(last-palindromic-prime-number 1000) ;=> 929
部分シーケンスの切出しと回文判定はどっちが先でもいいね。
(defn last-palindromic-prime-number [limit] (->> primes (filter palindromic-number?) (take-while (partial > limit)) last))
回文判定の回数を最小限にしたいならこうかな?
(defn last-palindromic-prime-number [limit] (->> primes (take-while (partial > limit)) reverse (filter palindromic-number?) first))
reverse のコストがどれだけのものかよくわからないので、これが効率的なのかどうかはわからない。