serna37's Library

Logo

C++ アルゴリズムとデータ構造のライブラリ

View the Project on GitHub serna37/library-cpp

:heavy_check_mark: MOD 階乗
(library/number/mod/mod_factorial.hpp)

MOD 階乗

できること

計算量

$O(N)$

使い方

long long fac = mod_factorial(x, MOD);

Required by

Verified with

Code

#pragma once
vector<long long> _mf_memo;
long long mod_factorial(int x, long long m) {
    if ((int)_mf_memo.size() > x) return _mf_memo[x];
    if (_mf_memo.empty()) _mf_memo.push_back(1);
    for (int i = _mf_memo.size(); i <= x; ++i)
        _mf_memo.push_back(_mf_memo.back() * i % m);
    return _mf_memo[x];
}
#line 2 "library/number/mod/mod_factorial.hpp"
vector<long long> _mf_memo;
long long mod_factorial(int x, long long m) {
    if ((int)_mf_memo.size() > x) return _mf_memo[x];
    if (_mf_memo.empty()) _mf_memo.push_back(1);
    for (int i = _mf_memo.size(); i <= x; ++i)
        _mf_memo.push_back(_mf_memo.back() * i % m);
    return _mf_memo[x];
}
Back to top page