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

OpenSSHのRSAの鍵

UBUNTU-VM [1]% cd openssh-5.0p1 UBUNTU-VM [1]% cat -n key.c | grep RSA_generate_key 573 private = RSA_generate_key(bits, 35, NULL, NULL); UBUNTU-VM [1]% RSAのN,e,d,p,qのうちeが35で固定。opensshのrsa1の公開鍵(~/.ssh/identity.pub)のフォーマ…

制御構造まとめ

>と','や;の挙動が全然分かっていなかったので調べてみた。 true, fail, ! 述語 用例 動作 true/0 true 必ず成功する fail/0 fail 必ず失敗する(強制的にバックトレースを行う) !/0(カット) ! 必ず成功する。副作用としてカット以前にバックトレースできなく…

project euler problem 10 answer

区間ふるいを使ったらとけた。ひどいソース。 primes(Primes, Prime, NextPrimes) :- [Prime, _] = Primes, primes_next(Primes, NextPrimes). primes_next([Prime, [Head, Appender]], NextPrimes) :- P1 is Prime + 1, (primes_is_prime(P1, Head, Appende…

つか、ふるいをすれてば良いんだ

確率的素数判定を行えばいいか。必要な領域は大きな整数が数個と素数判定の領域だけになる。今みたいに、200万以下の素数を全て持つ必要はなくなる。

project euler problem 10 answer ?

32bitのCPUでSWI-Prologを動かした場合local stackの上限が128MByteに設定されてしまっているため、以下のプログラムではオーバーフローを起こして動作しない。が、その制限を除けば正しいプログラムだと思う。何とかしたい! primes_new(Primes) :- Primes …

project euler problem 9 answer

良心に苛まれながらも貼る。 SICPにも似たような問題があった。SWI-Prologでグローバルスタックを拡張して実行した。 % ペアを作る(おまけ) integer_pairs_new(PairSeed) :- PairSeed = [[[1, 1] | Tail], Tail]. integer_pairs(PairSeed, Pair, NextPairSee…

明日からちょっくら帰省してくる

東京から埼玉へ帰省する!でもやることnathingになるよ。寄生中もとい帰省中何するか考えるか。

差分リストやループ

Prologで差分リストや末尾再帰の述語を書く場合、たいてい以下のようなイデオムを利用する。 差分リスト % たどる diff_list(List, ResultList) :- diff_list_sub(List, [ResultList, []]). diff_list_sub([Head | Rest], [Result, Tail]) :- <Headを何かしてXにする> [Result, Appe</headを何かしてxにする>…

project euler problem 8 answer

最近、ブログに回答を書くのがマナー違反なんじゃないかと思えて来た。 take(N, [Lcar | Lcdr], [Lcar | R]) :- N > 0, N1 is N - 1, take(N1, Lcdr, R). take(0, _, []). % 数字のアトムを数値に変換 numeric_to_number(List, NumberList) :- numeric_to_nu…