結果
| 問題 |
No.2576 LCM Pattern
|
| コンテスト | |
| ユーザー |
H20
|
| 提出日時 | 2023-11-20 01:10:31 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 68 ms / 2,000 ms |
| コード長 | 1,083 bytes |
| コンパイル時間 | 231 ms |
| コンパイル使用メモリ | 82,176 KB |
| 実行使用メモリ | 65,792 KB |
| 最終ジャッジ日時 | 2024-09-26 22:23:48 |
| 合計ジャッジ時間 | 2,262 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 23 |
ソースコード
import collections
#素因数分解
def prime_factorize(n):
a = []
while n % 2 == 0:
a.append(2)
n //= 2
f = 3
while f * f <= n:
if n % f == 0:
a.append(f)
n //= f
else:
f += 2
if n != 1:
a.append(n)
return a
N,M = map(int, input().split())
CP = collections.Counter(prime_factorize(M))
mod = 998244353
ans = 0
V = list(CP.values())#各素因数の指数を算出
X = len(CP)
for bit in range(1 << X):
#以下の列の種類数を算出
#bitが立っている場合は、1とその素因数の最大の指数-1まで使用可能
#bitが立っていない場合は、1とその素因数の最大の指数まで使用可能
st = 1
for i in range(X):
if bit >> i & 1:
st = st*pow(V[i],N,mod)%mod
else:
st = st*pow(V[i]+1,N,mod)%mod
#包除原理
pcnt = bin(bit).count('1')
ans += st * (1 if pcnt % 2 == 0 else -1)#bitの立っている個数が偶数なら足して、奇数なら引く
ans %= mod
print(ans)
H20