なんか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))