結果
問題 | No.1973 Divisor Sequence |
ユーザー |
|
提出日時 | 2022-06-12 09:43:07 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 488 ms / 2,000 ms |
コード長 | 1,214 bytes |
コンパイル時間 | 648 ms |
コンパイル使用メモリ | 82,160 KB |
実行使用メモリ | 84,864 KB |
最終ジャッジ日時 | 2024-09-22 19:30:43 |
合計ジャッジ時間 | 6,014 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 22 |
ソースコード
N,M = map(int,input().split()) C = 10 ** 6 + 2 P = 10 ** 9 + 7 dat = [0] * C ans = 1 for i in range(2,C): if dat[i] == 0: for j in range(2 * i,C,i): dat[j] = 1 if M % i == 0: M //= i count = 1 while M % i == 0: count += 1 M //= i dp = [1] * (count + 1) for _ in range(N-1): nx = [0] * (count + 1) S = [0] * (count + 1) S[0] = dp[0] for k in range(1,count + 1): S[k] = dp[k] + S[k-1] S[k] %= P for k in range(count + 1): nx[k] = S[count - k] dp = nx ans = ans * sum(dp) % P from functools import lru_cache @lru_cache def calc(count): dp = [1] * (count + 1) for _ in range(N - 1): nx = [0] * (count + 1) S = [0] * (count + 1) S[0] = dp[0] for k in range(1,count + 1): S[k] = dp[k] + S[k-1] S[k] %= P for k in range(count + 1): nx[k] = S[count - k] dp = nx return sum(dp) % P if M != 1: ans = ans * calc(1) % P print(ans)