結果
問題 | No.2318 Phys Bone Maker |
ユーザー |
![]() |
提出日時 | 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 |
ソースコード
MOD = 998244353def factorize(n):factors = {}i = 2while i * i <= n:while n % i == 0:factors[i] = factors.get(i, 0) + 1n = n // ii += 1if n > 1:factors[n] = 1return factorsdef 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 ** efor i in range(current_length):divisors.append(divisors[i] * p_power)divisors = list(sorted(divisors))return divisorsdef main():N = int(input())if N == 1:print(0)returnfactors = factorize(N)primes = sorted(factors.keys())divisors = generate_divisors(factors)n_div = len(divisors)# Precompute exponents for each divisorexponents = []for d in divisors:ex = {}temp = dfor p in primes:ex[p] = 0while temp % p == 0:ex[p] += 1temp //= pexponents.append(ex)div_to_idx = {d: i for i, d in enumerate(divisors)}dp = [0] * n_divdp[0] = 1 # Starting at divisor 1for 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 mex_m = exponents[j]count = 1for 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_icontinueelse:# Can have 0 to b_p in a_icount = (count * (b_p + 1)) % MODdp[j] = (dp[j] + dp[i] * count) % MOD# Find the index of N in divisorsidx = div_to_idx[N]print(dp[idx] % MOD)if __name__ == '__main__':main()