引数の自然数番目の素数を返す Python プログラム

なんかTLに流れてきたので自己流で書いてみました。
upper_bound は wikipedia素数定理のページの結果を鵜呑みにしてます。
ja.wikipedia.org

ベラボーにでかい n だと float の精度の問題でだめになると思いますが、そんな場合はどうせそもそも計算終わらないので無問題です(迫真)。
あと想定にない入力があったときに変な例外出ると思いますがまあ遊びなのでいいでしょ(投げやり)。

from numpy import ceil, log
import sys
    

def nth_prime(n):
    if n <= 0:
        return None
    if n in (1, 2):
        return n + 1    
    ubound = n * ceil(log(n) + log(log(n))).astype(int)
    sieve = list(range(2, ubound))

    for _ in range(n-1):
        root = sieve[0]
        sieve = [k for k in sieve if k % root != 0]

    return sieve[0]


if __name__ == "__main__":
    n = int(sys.argv[1])
    print(nth_prime(n))