結果

問題 No.1973 Divisor Sequence
ユーザー hir355
提出日時 2022-06-10 22:14:56
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 208 ms / 2,000 ms
コード長 1,313 bytes
コンパイル時間 318 ms
コンパイル使用メモリ 82,660 KB
実行使用メモリ 76,536 KB
最終ジャッジ日時 2024-09-21 07:30:25
合計ジャッジ時間 2,548 ms
ジャッジサーバーID
(参考情報)
judge4 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 22
権限があれば一括ダウンロードができます

ソースコード

diff #

from collections import Counter


def prime_factorize(n):
    a = []
    while n % 2 == 0:
        a.append(2)
        n //= 2
    f = 3
    while f * f <= n:
        while n % f == 0:
            a.append(f)
            n //= f
        else:
            f += 2
    if n != 1:
        a.append(n)
    return a

MOD = 10 ** 9 + 7
n, m = map(int, input().split())
pr = Counter(prime_factorize(m))
res = 1
for x in pr.values():
    mat = [[0] * (x + 1) for _ in range(x + 1)]
    ans = [[0] * (x + 1) for _ in range(x + 1)]
    for i in range(x + 1):
        ans[i][i] = 1
        for j in range(x + 1 - i):
            mat[i][j] = 1
    tk = n + 1
    while tk > 0:
        if tk & 1:
            t = [[0] * (x + 1) for _ in range(x + 1)]
            for i in range(x + 1):
                for j in range(x + 1):
                    for k in range(x + 1):
                        t[i][j] += mat[i][k] * ans[k][j] % MOD
            for i in range(x + 1):
                ans[i] = t[i][:]
        t = [[0] * (x + 1) for _ in range(x + 1)]
        for i in range(x + 1):
            for j in range(x + 1):
                for k in range(x + 1):
                    t[i][j] += mat[i][k] * mat[k][j] % MOD
        for i in range(x + 1):
            mat[i] = t[i][:]
        tk >>= 1
    res *= ans[0][0]
print(res % MOD)
0