群数列をPythonで作成する

1から順に奇数を並べて、次の通り数字の小さい方から順に1個、3個、5個、・・・となるように郡に分け、順に第1群、第2群、第3群・・・第n群とします。

1 | 3 5 7 | 9 11 13 15 17 | 19 ・・・・

このとき、第n群の最初の数は$2n^2-4n+3$、最後の数は、$2n^2-1$となります。また、それぞれの群にある個数は、$2n-1$なので、各群の数字の和は次の通りになります。

$\frac{1}{2}((2n^2-4n+3)+(2n^2-1))(2n-1)=(2n-1)(2n^2-2n+1)$

これだけだとあまり面白くありませんが、第1項から第n項までの総和を計算すると、第k項の和のさらに総和を求めると考えて次のように計算します。

$\displaystyle \sum_{k=1}^{n}(2k-1)(2k^2-2k+1)=n^4$

とてもきれいな結果になります。

#GroupSequence in Python
total = 0
seq = 1
count = 1
list = []
for group in range(1, 6+1, 1):
    temp = []
    for nth in range(1, count+1):
        item = (2*seq-1)
        total += item
        temp.append(item)
        seq += 1
    print(group, total)
    list.append(temp)
    count += 2

list
1 1
2 16
3 81
4 256
5 625
6 1296
[[1],
 [3, 5, 7],
 [9, 11, 13, 15, 17],
 [19, 21, 23, 25, 27, 29, 31],
 [33, 35, 37, 39, 41, 43, 45, 47, 49],
 [51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71]]

はじめに群ごとにそれまでの総和を計算しています。たしかに、$n^4$になっていることがわかります。また、群数列は2次元のリストで表示されます。

変数の考え方です。totalは総和、seqは群とは関係なしに並べた奇数の番、itemはその数、groupは群の順番、countは各群に属する数字の個数を表しています。また、群数列はlistであらわし、その中でtempとして各群のリストを作成してlistに追加しています。短いプログラムのわりにやたら変数が多くて改善の余地が大いにありそうですがとりあえず計算することができました。

この記事を書いた人

目次
閉じる