範囲 N の乱数列の重複探索は基本的に計算量 O(√N) で終了する。 from random import randrange n = 10**9+7 s = set() while True: x = randrange(n) if x in s: break s.add(x) print(len(s)) O(√N) 個以内に重複が見つかる理由は誕生日のパラドックスで、重複の判定にハッシュテーブルを使ってるので全体計算量も O(√N) 。 ポラードのρ法は N の約数(真の約数)の探索を、範囲 N の乱数列の重複探索で行うアルゴリズム。 乱数列から選んだ x, y が GCD(|x-y|,…