OEISに載っていない正の整数を探す
はじめに
OEISには、多くの整数列が載っている。
現在 20067がOEISに出てきていない最小の正の整数であると、wikipediaの「面白い数のパラドックス」に載っているが、これを確認してみる。
全数列データの取得
CC-BY-NC 3.0 licenseの元で、全数列データを利用できる。
ダウンロードして解凍した、strippedというファイルを利用する。
OEISに載っていない正の整数を探す
まず、strippedファイルを開くと、5行目から数列のデータがあるとわかるので、5行目以降読み取る。
import pandas as pd
from collections import Counter
# strippedファイルの5行目から
df = pd.read_csv('stripped', skiprows=4, header=None, delim_whitespace=True,
names=['A_number', 'seq_str'])
数列は文字列なので、リストに変換したカラムを追加。
def modify_seq(row):
numbers = [int(num) for num in row.split(',') if num.strip()] # 空の文字列を除外
return numbers
df['seq'] = df['seq_str'].apply(modify_seq)
数列をリストに変換したカラムを用いて、出てきていない正の整数を探す。
def find_missing_positve_integers(a_list, num_missing):
a_set = set(a_list)
missing_integers = []
num = 1
while len(missing_integers) < num_missing:
if num not in a_set:
missing_integers.append(num)
num += 1
return missing_integers
def interesting_num(column):
all_integers = [integer for row in column for integer in row]
# 出現するkeyを取得
return Counter(all_integers).keys()
interesting_integers = interesting_num(df['seq'])
print(find_missing_positve_integers(interesting_integers, 10))
出力結果は
[20067, 20990, 22978, 23543, 23735, 24085, 24159, 24555, 26301, 26673]
となり、20067が載っていないことが確認できた。(2024/10/05更新)