結果

問題 No.502 階乗を計算するだけ
ユーザー yasunori
提出日時 2025-02-20 09:05:59
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 168 ms / 1,000 ms
コード長 2,469 bytes
コンパイル時間 4,392 ms
コンパイル使用メモリ 278,016 KB
実行使用メモリ 6,820 KB
最終ジャッジ日時 2025-02-20 09:06:07
合計ジャッジ時間 6,486 ms
ジャッジサーバーID
(参考情報)
judge3 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 52
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
// #include <boost/multiprecision/cpp_int.hpp>
using namespace std;
// using bigint = boost::multiprecision::cpp_int;

template <typename T> using min_priority_queue = priority_queue<T,vector<T>,greater<T>>;

random_device seed_gen;
mt19937 engine(seed_gen());

int64_t get_time_ns(){
    struct::timespec t;
    clock_gettime(CLOCK_MONOTONIC, &t);
    return t.tv_sec * int64_t(1'000'000'000) + t.tv_nsec;
}

int64_t mod = 1'000'000'007;
int64_t B = 10'000'000;
void embed() {
    int64_t x = 1;
    for(int64_t i = 0; i < mod; i++) {
        if(i) x = x * i % mod;

        if(i % B == 0) {
            cout << x << "," << endl;
        }
    }
}

vector<int64_t> V = {
    1,
    682498929,
    491101308,
    76479948,
    723816384,
    67347853,
    27368307,
    625544428,
    199888908,
    888050723,
    927880474,
    281863274,
    661224977,
    623534362,
    970055531,
    261384175,
    195888993,
    66404266,
    547665832,
    109838563,
    933245637,
    724691727,
    368925948,
    268838846,
    136026497,
    112390913,
    135498044,
    217544623,
    419363534,
    500780548,
    668123525,
    128487469,
    30977140,
    522049725,
    309058615,
    386027524,
    189239124,
    148528617,
    940567523,
    917084264,
    429277690,
    996164327,
    358655417,
    568392357,
    780072518,
    462639908,
    275105629,
    909210595,
    99199382,
    703397904,
    733333339,
    97830135,
    608823837,
    256141983,
    141827977,
    696628828,
    637939935,
    811575797,
    848924691,
    131772368,
    724464507,
    272814771,
    326159309,
    456152084,
    903466878,
    92255682,
    769795511,
    373745190,
    606241871,
    825871994,
    957939114,
    435887178,
    852304035,
    663307737,
    375297772,
    217598709,
    624148346,
    671734977,
    624500515,
    748510389,
    203191898,
    423951674,
    629786193,
    672850561,
    814362881,
    823845496,
    116667533,
    256473217,
    627655552,
    245795606,
    586445753,
    172114298,
    193781724,
    778983779,
    83868974,
    315103615,
    965785236,
    492741665,
    377329025,
    847549272,
    698611116,
};

int main() {
    // embed();
    int64_t n; cin >> n;

    int64_t ans;
    if(n >= mod) ans = 0;
    else {
        ans = V[n/B];
        for(int64_t i = n/B*B+1; i <= n; i++) {
            ans = ans * i % mod;
        }
    }

    cout << ans << endl;
    return 0;
}
0