結果

問題 No.2318 Phys Bone Maker
ユーザー lam6er
提出日時 2025-03-26 16:00:01
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 1,269 ms / 3,000 ms
コード長 2,029 bytes
コンパイル時間 265 ms
コンパイル使用メモリ 82,688 KB
実行使用メモリ 80,128 KB
最終ジャッジ日時 2025-03-26 16:01:03
合計ジャッジ時間 13,028 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 45
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

MOD = 998244353
def factorize(n):
factors = {}
i = 2
while i * i <= n:
while n % i == 0:
factors[i] = factors.get(i, 0) + 1
n = n // i
i += 1
if n > 1:
factors[n] = 1
return factors
def generate_divisors(factors):
divisors = [1]
for p, exp in factors.items():
current_length = len(divisors)
for e in range(1, exp + 1):
p_power = p ** e
for i in range(current_length):
divisors.append(divisors[i] * p_power)
divisors = list(sorted(divisors))
return divisors
def main():
N = int(input())
if N == 1:
print(0)
return
factors = factorize(N)
primes = sorted(factors.keys())
divisors = generate_divisors(factors)
n_div = len(divisors)
# Precompute exponents for each divisor
exponents = []
for d in divisors:
ex = {}
temp = d
for p in primes:
ex[p] = 0
while temp % p == 0:
ex[p] += 1
temp //= p
exponents.append(ex)
div_to_idx = {d: i for i, d in enumerate(divisors)}
dp = [0] * n_div
dp[0] = 1 # Starting at divisor 1
for i in range(n_div):
d = divisors[i]
ex_d = exponents[i]
for j in range(i + 1, n_div):
m = divisors[j]
if m % d != 0:
continue
# Compute exponents for m
ex_m = exponents[j]
count = 1
for p in primes:
a_p = ex_d.get(p, 0)
b_p = ex_m.get(p, 0)
if a_p < b_p:
# Must have exactly b_p in a_i
continue
else:
# Can have 0 to b_p in a_i
count = (count * (b_p + 1)) % MOD
dp[j] = (dp[j] + dp[i] * count) % MOD
# Find the index of N in divisors
idx = div_to_idx[N]
print(dp[idx] % MOD)
if __name__ == '__main__':
main()
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0