pandasでpaiza問題(二重ループ:素数の個数)

スポンサーリンク

paizaへのリンク(二重ループ:素数の個数 (paizaランク C 相当)

エラトステネスの篩(Sieve of Eratosthenes)という素数を探すアルゴリズムをpandasで動かしてみる。この計算のロジックについては数学が得意な人が色々と説明しているので省略する。pandasでは行を削除するときにdrop()を使い、インデックスを振り直す時にreset_index()を使うのだが、そのままDataFrameに反映させたい時はinplace=Trueにする必要がある。

import pandas as pd
import math

n = int(input())

lst1 = list(range(2, n + 1))
df1 = pd.DataFrame(lst1)
n_sqrt = int(math.sqrt(n))

for i in range(2, n_sqrt + 1):
    j = i
    while True:
        if j >= len(df1):
            break
        k = df1.iat[j, 0]
        if (k % i == 0) and (k / i >= 2):
            df1.drop(index=j, inplace=True)
            df1.reset_index(inplace=True, drop=True)
            continue
        else:
            j += 1

    # print(df1) ここでprintすれば、各ステップで残った数の一覧が出力される

print(len(df1))

「pandasでpaiza問題」記事一覧へのリンク

コメント

当ブログのコンテンツが気に入ったら広告ブロックの解除(ホワイトリスト化)をご検討下さい。

Please disable your adblocker or whitelist this site!

タイトルとURLをコピーしました