PythonでConnell(コネル)数列のn番目の項を求める方法
数 n が与えられたとき、Connell(コネル)数列の n 番目の項を求める問題を考えてみましょう。まずは、この数列がどのような規則で構成されているのかを確認します。
Connell数列とは?
Connell数列は、「奇数・偶数を交互に、取り出す個数を1つずつ増やしながら」並べていく数列です。生成ルールは次のとおりです。
- 最初に、奇数を1つ取ります:1
- 次に、偶数を2つ取ります:2, 4
- 続いて、奇数を3つ取ります:5, 7, 9
- その次は、偶数を4つ取ります:10, 12, 14, 16
- 以降も同じパターンを繰り返します
つまり、Connell数列は「1, 2, 4, 5, 7, 9, 10, 12, 14, 16, …」という形になります。例として、入力が12の場合、出力は21です。
解法の考え方
各グループにはその番号と同じ個数の要素が含まれるため、m グループ目までの累積要素数は三角数 m×(m+1)/2 になります。この性質を利用すると、n 番目の要素がどのグループに属するかを特定できます。さらに、各グループ内の値は公差2の等差数列になっているため、グループ末尾の値から逆算することで目的の項を求められます。
具体的な手順は以下のとおりです。
- i を 1 で初期化する
- (i × (i + 1) / 2) の商が n + 1 未満である間、i を 1 ずつ増やす
- idx := i × (i + 1) / 2(商のみ=整数除算)とする
- num := i² とする
- num − 2 × (idx − n − 1) を結果として返す
Pythonでの実装例
それでは、実際のコードを見てみましょう。
class Solution:
def solve(self, n):
i = 1
while (i * (i + 1) // 2) < n + 1:
i += 1
idx = i * (i + 1) // 2
num = i**2
return num - 2 * (idx - n - 1)
ob = Solution()
print(ob.solve(12))
入力
12
出力
21
-
【初心者向け】Pythonのissuperset()メソッドの使い方をわかりやすく解説
はじめにこの記事では、Pythonのissuperset()メソッドについて、基本的な仕組みから実際のコード例まで詳しく解説します。issuperset()は、セット(集合)に対して使用できるメソッドで、引数として渡されたセットのすべての要素が、呼び出し元のセットに含まれているかどうかを判定します。呼び出し元のセットBが、引数のセットAのすべての要素を含んでいる場合 → True を返すセットAの要素がすべてBに含まれていない場合 → False を返すつまり、「BがAの上位集合(スーパーセット)であるかどうか」を判定するためのメソッドです。基本構文B.issuperset(A)この式は、Bが
-
Pythonでリストを出力する方法|インデックスの基本から実践的な出力テクニックまで
Pythonのリストとは? Pythonのリスト(list)は、複数の要素をひとつにまとめて管理できるデータ型です。リスト内の各要素は順序を持って格納されており、それぞれの位置(インデックス)を指定することで、任意の要素にアクセスできます。 インデックスは0から始まる リストのインデックスは0から始まる点に注意が必要です。つまり、最初の要素が list[0]、2番目の要素が list[1]、3番目の要素が list[2] に対応します。 例えば、以下のようなリストを考えてみましょう。 numbers = [10, 20, 50, 40] print(numbers[2]) # 出力結果:5