結果
問題 |
No.575 n! / m / m / m...
|
ユーザー |
![]() |
提出日時 | 2025-03-20 20:29:03 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 43 ms / 2,000 ms |
コード長 | 1,682 bytes |
コンパイル時間 | 203 ms |
コンパイル使用メモリ | 82,532 KB |
実行使用メモリ | 59,992 KB |
最終ジャッジ日時 | 2025-03-20 20:29:54 |
合計ジャッジ時間 | 2,260 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 23 |
ソースコード
import math def prime_factors(m): factors = {} while m % 2 == 0: factors[2] = factors.get(2, 0) + 1 m = m // 2 i = 3 while i * i <= m: while m % i == 0: factors[i] = factors.get(i, 0) + 1 m = m // i i += 2 if m > 1: factors[m] = 1 return factors def compute_k(n, factors): k = float('inf') for p, exp in factors.items(): v = 0 current = p while current <= n: v += n // current current *= p temp_k = v // exp if temp_k < k: k = temp_k return k def main(): import sys input_line = sys.stdin.readline().strip() n, m = map(int, input_line.split()) factors = prime_factors(m) if not factors: print("1e0") return k = compute_k(n, factors) try: log_nfact = math.lgamma(n + 1) / math.log(10) except OverflowError: log_nfact = float('inf') log_m = math.log10(m) log_val = log_nfact - k * log_m if log_val < 0: d = 0 p_val = 0.0 else: d = int(log_val) f = log_val - d p_val = 10 ** f p_rounded = round(p_val, 2) if p_rounded >= 10.0: d += 1 p_rounded = 1.0 elif p_rounded < 1.0 and p_val != 0.0: d -= 1 p_rounded = round(10 ** (f + 1), 2) if p_rounded >= 10.0: d += 1 p_rounded = 1.0 if p_rounded == int(p_rounded): part = f"{int(p_rounded)}e{d}" else: formatted = "{0:.2f}".format(p_rounded).rstrip('0').rstrip('.') part = f"{formatted}e{d}" print(part) if __name__ == "__main__": main()