結果

問題 No.502 階乗を計算するだけ
ユーザー qwewe
提出日時 2025-05-14 12:59:40
言語 PyPy3
(7.3.15)
結果
TLE  
実行時間 -
コード長 1,091 bytes
コンパイル時間 139 ms
コンパイル使用メモリ 82,736 KB
実行使用メモリ 66,256 KB
最終ジャッジ日時 2025-05-14 13:00:49
合計ジャッジ時間 4,470 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 32 TLE * 1 -- * 19
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys

def solve():
    n = int(sys.stdin.readline())
    MOD = 10**9 + 7

    # n! を計算する
    # n! = 1 * 2 * 3 * ... * n

    # 定義により 0! = 1
    if n == 0:
        print(1)
        return

    # Wilsonの定理の簡単な応用:
    # もし n が MOD 以上であれば、n! の因数の中に MOD が含まれる。
    # MOD = 10^9 + 7 は素数である。
    # よって、n >= MOD の場合、n! は MOD で割り切れる。
    # したがって、n! mod MOD = 0 となる。
    if n >= MOD:
        print(0)
        return

    # n < MOD の場合、単純に階乗を計算し、各ステップで MOD を取る。
    # これにより、数値が大きくなりすぎるのを防ぐ。
    result = 1
    for i in range(1, n + 1):
        result = (result * i) % MOD
        # Note: If result becomes 0 at any point, it stays 0.
        # However, since MOD is prime and i <= n < MOD, i will never be a multiple of MOD,
        # and result will only be 0 if n >= MOD, which is handled above.

    print(result)

if __name__ == "__main__":
    solve()
0