Euler : Problem 77

Posted by YpsilonTAKAI On 2012年4月19日木曜日 0 コメント
最近、Herokuでのアプリ作りで苦闘していたり、仕事が忙しかったりして、更新してなかったけど、久しぶりにPEを解いた。


数を素数で分割する問題です。







普通に組み合わせで解こうとするとできないのは目に見えている。
前の問題で、数を自然数で分割する問題は解いたので、これを利用できないかなと考えた。
で、そのときの漸化式はこれですが、

  • p(kn) = 0 if k  > n
  • p(kn) = 1 if k = n
  • p(kn) = p(k+1, n) + p(kn − k) otherwise.

これ、結局、問題を分割していくわけで、そのとき、キーになるのが k です。 ここでは k を1から順に1ずつ増やしながら調べていくわけですが、数えられるのは、k と n が同じ値になったときであって、それを1通りと数えているわけです。

だから、k を素数に限定してしまえば素数で分割したものが得られるわけ。

うーん。今一つ説明がうまくできない。まあ、こういう式を作りました。


  • p(kn) = 0 if k  > n
  • p(kn) = 1 if k = n
  • p(kn) = p(kの次の素数n) + p(kn − k) otherwise.

これだけ。



・ next-prime
 その名の通り、xの次の素数を返します。


・ partition-num-prime
 上の漸化式を表現したもの。 76の (inc k) を (next-prime k) に変えただけ。


・ pe76
 1から順に計算していって、n以下のものを捨てて、最初の1つを取ります。


0 コメント:

コメントを投稿