結果

問題 No.502 階乗を計算するだけ
ユーザー NyaanNyaanNyaanNyaan
提出日時 2023-04-06 22:56:49
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
AC  
実行時間 7 ms / 1,000 ms
コード長 6,784 bytes
コンパイル時間 852 ms
コンパイル使用メモリ 78,212 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2024-10-02 18:25:00
合計ジャッジ時間 2,560 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 3 ms
5,248 KB
testcase_01 AC 2 ms
5,248 KB
testcase_02 AC 2 ms
5,248 KB
testcase_03 AC 3 ms
5,248 KB
testcase_04 AC 3 ms
5,248 KB
testcase_05 AC 2 ms
5,248 KB
testcase_06 AC 2 ms
5,248 KB
testcase_07 AC 2 ms
5,248 KB
testcase_08 AC 3 ms
5,248 KB
testcase_09 AC 2 ms
5,248 KB
testcase_10 AC 2 ms
5,248 KB
testcase_11 AC 2 ms
5,248 KB
testcase_12 AC 2 ms
5,248 KB
testcase_13 AC 3 ms
5,248 KB
testcase_14 AC 2 ms
5,248 KB
testcase_15 AC 2 ms
5,248 KB
testcase_16 AC 2 ms
5,248 KB
testcase_17 AC 3 ms
5,248 KB
testcase_18 AC 2 ms
5,248 KB
testcase_19 AC 2 ms
5,248 KB
testcase_20 AC 3 ms
5,248 KB
testcase_21 AC 2 ms
5,248 KB
testcase_22 AC 7 ms
5,248 KB
testcase_23 AC 4 ms
5,248 KB
testcase_24 AC 6 ms
5,248 KB
testcase_25 AC 3 ms
5,248 KB
testcase_26 AC 5 ms
5,248 KB
testcase_27 AC 4 ms
5,248 KB
testcase_28 AC 4 ms
5,248 KB
testcase_29 AC 3 ms
5,248 KB
testcase_30 AC 7 ms
5,248 KB
testcase_31 AC 5 ms
5,248 KB
testcase_32 AC 3 ms
5,248 KB
testcase_33 AC 7 ms
5,248 KB
testcase_34 AC 4 ms
5,248 KB
testcase_35 AC 7 ms
5,248 KB
testcase_36 AC 3 ms
5,248 KB
testcase_37 AC 7 ms
5,248 KB
testcase_38 AC 3 ms
5,248 KB
testcase_39 AC 6 ms
5,248 KB
testcase_40 AC 5 ms
5,248 KB
testcase_41 AC 3 ms
5,248 KB
testcase_42 AC 3 ms
5,248 KB
testcase_43 AC 2 ms
5,248 KB
testcase_44 AC 2 ms
5,248 KB
testcase_45 AC 3 ms
5,248 KB
testcase_46 AC 2 ms
5,248 KB
testcase_47 AC 2 ms
5,248 KB
testcase_48 AC 3 ms
5,248 KB
testcase_49 AC 2 ms
5,248 KB
testcase_50 AC 2 ms
5,248 KB
testcase_51 AC 3 ms
5,248 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

/**
 *  date : 2023-04-06 22:55:51
 */

#define NDEBUG
#include <iostream>

#include <string>

using namespace std;


#include <algorithm>
#include <vector>
using namespace std;

namespace Base64 {

using L = long long;
char base[65] =
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
int ibase(char c) {
  return 'a' <= c   ? 0x1A + c - 'a'
         : 'A' <= c ? 0x00 + c - 'A'
         : '0' <= c ? 0x34 + c - '0'
         : '+' == c ? 0x3E
                    : 0x3F;
}
template <typename T>
string encode(vector<T> &a) {
  T x = a[0], y = a[0];
  for (auto &z : a) x = max(x, z), y = min(y, z);
  L N = a.size(),
    B = max<L>(6, y < 0 ? sizeof(T) * 8 : 64 - __builtin_clzll(x));
  string S((B * N + 11) / 6, 0);
  S[0] = B;
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < B; j++) {
      if ((a[i] >> j) & 1) S[(i * B + j) / 6 + 1] |= 1 << ((i * B + j) % 6);
    }
  }
  for (auto &c : S) c = base[(int)c];
  return S;
}
vector<L> decode(string S) {
  for (auto &c : S) {
    c = ibase(c);
  }
  L B = S[0], M = S.size() - 1;
  vector<L> a(6 * M / B, 0);
  for (int i = 0; i < M; i++) {
    for (int j = 0; j < 6; j++) {
      if ((S[i + 1] >> j) & 1) a[(i * 6 + j) / B] |= 1LL << ((i * 6 + j) % B);
    }
  }
  return a;
}
}  // namespace Base64


string S = "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";

int main() {
  /*
  int M = 1002, Z = 1000000;
  vector<long long> v(M);
  v[0] = 1;
  for (long long i = 1, x = 1; i < M * Z; i++) {
    x = x * i % 1000000007;
    if (i % Z == 0) v[i / Z] = x;
  }
  cout << Base64::encode(v) << "\n";
  */
  auto a = Base64::decode(S);
  long long N, Z = 1000000;
  cin >> N;
  N = min(N, 1000000007LL);
  long long x = a[N / Z];
  for (long long b = N / Z * Z + 1; b <= N; b++) {
    x = x * b % 1000000007;
  }
  cout << x << "\n";
}
0