AtCoder-Library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub ryusuke920/AtCoder-Library

:warning: Math/nCkFactorization.py

Code

def primes_list(n):
    """エラトステネスの篩でn以下の素数を全列挙する"""
    if n == 0:
        return []
    is_prime = [True] * (n + 1)
    is_prime[0] = False
    is_prime[1] = False
    for i in range(2, int(n ** 0.5) + 1):
        if not is_prime[i]: continue
        for j in range(i * 2, n + 1, i):
            is_prime[j] = False
    return [i for i in range(n + 1) if is_prime[i]]

def nCkFactorization(n: int, k: int) -> list:
    """nCkの 1,2,...,k, n,n-1,...,n-k+1を全て素因数分解する"""

    # 分子
    divisors_1 = [[] for _ in range(k)]
    a = [n - i for i in range(k)]
    num = primes_list(int(n ** 0.5) + 1)

    for p in num:
        for i in reversed(range(n - k + 1 + p - (n - k + 1) % p if (n - k + 1) % p != 0 else n - k + 1, n + 1, p)):
            while a[n - i] % p == 0:
                divisors_1[n - i].append(p)
                a[n - i] //= p

    for i in range(len(a)):
        if a[i] != 1:
            divisors_1[i].append(a[i])

    # 分母
    divisors_2 = [[] for _ in range(k + 1)]
    a = [i for i in range(k + 1)]
    num = primes_list(k) # 素数の全列挙
    
    for p in num:
        for i in range(p, k + 1, p):
            while a[i] % p == 0:
                divisors_2[i].append(p)
                a[i] //= p
    
    return divisors_1, divisors_2

x, y = nCkFactorization(100, 30)
print("分子")
print(*x, sep="\n")
print("分母")
print(*y, sep="\n")
Traceback (most recent call last):
  File "/opt/hostedtoolcache/Python/3.12.3/x64/lib/python3.12/site-packages/onlinejudge_verify/documentation/build.py", line 71, in _render_source_code_stat
    bundled_code = language.bundle(stat.path, basedir=basedir, options={'include_paths': [basedir]}).decode()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.3/x64/lib/python3.12/site-packages/onlinejudge_verify/languages/python.py", line 96, in bundle
    raise NotImplementedError
NotImplementedError
Back to top page