« アルゴリズムの重要性 Project Euler --- Problem 36 | トップページ | Project Euler --- Problem 4 »

2009年3月19日 (木)

Project Euler --- Problem 27 再び

最近、以前解いた問題を「リスト内包表記」で書き換えられないか試してます。 例えば、"Problem 27" を書き直したのが、次のコードです。

(define problem-027 (lambda () ;; (+ (* n n) (* a n) b) で n がいくつまで素数になるかを調べる。 ;; n < 40 の場合は 0 を返す。 (define check (lambda (a b) (let loop ([n 1]) (if [prime? (+ (* n n) (* a n) b)] (loop (+ n 1)) (if [> n 39] n 0))))) (let* ([lst (set-of (cons c (cons a b)) (b in (cdr (prime-list (- 1000 1)))) (a in (sequence (- (quotient (- b) 40) 40) 999)) (odd? a) (c is (check a b)) (> c 0))] [a-lst (car (sort (lambda (lst1 lst2) (> (car lst1) (car lst2))) lst))] [a (cadr a-lst)] [b (cddr a-lst)] [c (car a-lst)]) (printf "a:~d, b:~d, n:~d, a*b:~d~%" a b c (* a b)))))

ちょっとだけ、すっきりしたように思えます。スピードも若干速くなっています。自分で一生懸命考えたループより、 マクロの方が速いのがちょっとくやしいですが、「リスト内包表記」の威力を感じた問題でした。

« アルゴリズムの重要性 Project Euler --- Problem 36 | トップページ | Project Euler --- Problem 4 »

Project Euler」カテゴリの記事

Scheme」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/112020/44400811

この記事へのトラックバック一覧です: Project Euler --- Problem 27 再び:

« アルゴリズムの重要性 Project Euler --- Problem 36 | トップページ | Project Euler --- Problem 4 »

2016年7月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
フォト

最近のトラックバック

無料ブログはココログ