2021.04.16ホーム未分類オイラーの分割恒等式をPythonで求めるオイラーの分割恒等式をPythonで求めます。partitions)まずに単純な自然数の分割についてです。ある自然数を自然数の和で表します。このとき、その自然数自身も含み、足す順番は大きいものから小さいものへ並べるようにします。5であれば次のように、7つが考えられます。(1,1,3)のように右側が大きくなるものは含まれません。この組み合わせの数を、自然数1から49まで並べると次の通りです。A000041とりあえず、Pythonで1から7まで求めるようにしました。配列は3次元になっており、l1のリストの中で、l2には各自然数の中での組み合わせの1つ1つがl3のリストとして含まれるようにします。1]]]ちなみに55まで求めてリストの要素の数を出力すると次の通りで、正しく計算されているようです。粗いプログラムなので、ゆくゆくは再帰関数を使って求めてみたいと思います。1,2,3,5,7,11,15,22,30,42,56,77,101,135,176,231,297,385,490,627,792,1002,1255,1575,1958,2436,3010,3718,4565,5604,6842,8349,10143,12310,14883,17977,21637,26015,31185,37338,44583,53174,63261,75175,89134,105558,124754,147273,173525,204226,239943,281589,329931,386155これだけなら何も面白くありませんが、ここで求めた数列にはすごい性質があります。partition)前に求めた数列から、同じ数字が含まれるものを除きます。前の5を例にとると(3,1,1)や(1,1,1,1,1)などは、1が複数含まれるので、このような組合せは含まれないようにします。結果残りは、次の3つになります。(5,),(4,1),(3,2)前に求めた分割の配列l1から次のプログラムで重複するものを除いて、リストd1に追加していきます。1]]]後で検証しますが、7まで計算したところでは問題なさそうです。partotion)次に、初めに求めた数列から、奇数のみを使ったものだけを取り出します。5を例にすると(4,1),(2,2,1)のように、1つでも偶数が入っているものは取り除きます。1)Pythonでプログラムを作ってみます。1]]]こちらも7までは問題なさそうです。異分割と奇分割の関係ここでようやく、面白いことがわかります。両者の数を55まで求めると次のように一致するのです。partitions)最後に再帰関数で単純な分割する関数を作ってみました。1]]思ったより簡単でした。for文の中で再帰関数を使うのは珍しいです。