2010-05-01から1ヶ月間の記事一覧

Project Euler 41

http://projecteuler.net/index.php?section=problems&id=41 今度こそちゃんと順列を出すコードを書いた。

Project Euler 29

F#

http://projecteuler.net/index.php?section=problems&id=29 Setは次のように使います。 let s : int Set = Set.empty let s1 = s.Add 1 let s2 = s1.Add 2 let s3 = s2.Add 1 printfn "%A" s3 // seq [1; 2]Addすると新たにSetが作られます。使いにくいです…

Project Euler 28

F#

http://projecteuler.net/index.php?section=problems&id=28 スパイラルの位置の列を作ります。

n^2+1型の素数の列挙

n2 + 1という形の素数を求める問題はProject Eulerで頻出なので簡単なアルゴリズムを解説します。 例として200以下のこの形の素数を列挙します。 まず、n2 + 1を順に並べます。 2 5 10 17 26 37 50 65 82 101 122 145 170 1972で割り切れる数が1つおきにある…

Project Euler 291(2)

http://projecteuler.net/index.php?section=problems&id=291 昨日暑い中20km走ったら、軽い熱射病っぽくなった。ちゃんと水分補給しなきゃね。 ちょっと数式をいじっていたら、n2 + 1の方法が使えることが分かった。でもPythonだと遅いしメモリをやたらと食…

Project Euler 291

http://projecteuler.net/index.php?section=problems&id=291 5時過ぎに目が覚めたため問題を見るも頭が働かない。 だんだん分かってきたが、5×1015はとてつもなく大きい。 n2 + 1と同じやり方でできるのかと思っていたら違った。まずいな、時間がない。

Project Euler 40

http://projecteuler.net/index.php?section=problems&id=40 数字を一桁ずつ出すクラスを作る。本当はそうする必要も無いが、練習のつもりで。

Project Euler 27

F#

http://projecteuler.net/index.php?section=problems&id=27 こうするとエラーになります。 printfn "%d" (Seq.length (Seq.takeWhile (fun n -> n < 30) Seq.initInfinite (fun n -> n * n)))どうもSequenceを束縛しなければならないようです。 let s = Seq…

Project Euler 39

http://projecteuler.net/index.php?section=problems&id=39 p = 2lm(m + n) だから、l, m, nを変えてpを配列でカウントする。

Project Euler 26

F#

http://projecteuler.net/index.php?section=problems&id=26 この問題はオイラーの定理を使うと計算が速くなるのですが、コードがかなり長くなってしまいますね。本当は大きいほうから調べるとさらに速いです。

Project Euler 37

http://projecteuler.net/index.php?section=problems&id=37 右から短くしていっても素数のままの数を求めるのと左からのもののアルゴリズムがほとんど同じなので、テンプレートを使って共通化できるところは同じコードを使うようにしたら、却ってコードが長…

Project Euler 25

F#

http://projecteuler.net/index.php?section=problems&id=25 yieldを使ってフィボナッチ数列を出してもいいですが、前にやったようにunfoldを使うと美しいですね。大きな数になるのでサフィックスIをつけるのを忘れてはいけません。 let count n = Seq.initI…

Project Euler 24

F#

http://projecteuler.net/index.php?section=problems&id=24 この問題は手計算レベルの計算量で済みます。 let rec factorial n = if n = 0 then 1 else n * (factorial (n - 1)) let to_number a = List.fold (fun x y -> x * 10L + int64 y) 0L a let rec …

Project Euler 23

F#

http://projecteuler.net/index.php?section=problems&id=22 必要な範囲の過剰数を全て求めて、それをひっくり返したものと比較しながら和があるかを調べます。

Project Euler 290(2)

http://projecteuler.net/index.php?section=problems&id=290昨日解法を思いついた。全然違う方向で考えていた。

Project Euler 22

F#

http://projecteuler.net/index.php?section=problems&id=22 Fileの入力には.NETを使います。

Project Euler 290

全然思いつかない。