試し割り

$2$ から $\sqrt{N}$ までの数で割ってみる方法です。篩を作るほどではないときや、 $N$ が $10^{12}$ 程度まで大きいときに使います。

$N$ 以下の数を何度も扱うときは、エラトステネスの篩 の方が速いです。

コード

def is_prime(n):
    if n < 2:
        return False
    i = 2
    while i * i <= n:
        if n % i == 0:
            return False
        i += 1
    return True


def divisors(n):
    small = []
    large = []
    i = 1
    while i * i <= n:
        if n % i == 0:
            small.append(i)
            if i != n // i:
                large.append(n // i)
        i += 1
    return small + large[::-1]


def factorize(n):
    # [(素因数, 指数), ...]
    res = []
    i = 2
    while i * i <= n:
        if n % i == 0:
            e = 0
            while n % i == 0:
                n //= i
                e += 1
            res.append((i, e))
        i += 1
    if n > 1:
        res.append((n, 1))
    return res