結果

問題 No.502 階乗を計算するだけ
ユーザー hiromi_ayasehiromi_ayase
提出日時 2017-04-08 00:30:07
言語 Java21
(openjdk 21)
結果
AC  
実行時間 221 ms / 1,000 ms
コード長 5,285 bytes
コンパイル時間 2,629 ms
コンパイル使用メモリ 77,956 KB
実行使用メモリ 51,976 KB
最終ジャッジ日時 2024-07-16 03:33:25
合計ジャッジ時間 7,470 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 51 ms
50,160 KB
testcase_01 AC 51 ms
50,128 KB
testcase_02 AC 51 ms
50,056 KB
testcase_03 AC 53 ms
50,088 KB
testcase_04 AC 53 ms
49,916 KB
testcase_05 AC 51 ms
49,796 KB
testcase_06 AC 51 ms
49,908 KB
testcase_07 AC 53 ms
49,864 KB
testcase_08 AC 51 ms
50,108 KB
testcase_09 AC 51 ms
50,088 KB
testcase_10 AC 51 ms
49,704 KB
testcase_11 AC 53 ms
50,080 KB
testcase_12 AC 51 ms
50,100 KB
testcase_13 AC 51 ms
49,808 KB
testcase_14 AC 53 ms
49,764 KB
testcase_15 AC 53 ms
50,084 KB
testcase_16 AC 53 ms
50,168 KB
testcase_17 AC 53 ms
50,140 KB
testcase_18 AC 52 ms
50,132 KB
testcase_19 AC 52 ms
50,092 KB
testcase_20 AC 50 ms
50,124 KB
testcase_21 AC 50 ms
49,712 KB
testcase_22 AC 74 ms
50,932 KB
testcase_23 AC 69 ms
50,364 KB
testcase_24 AC 70 ms
51,216 KB
testcase_25 AC 53 ms
50,108 KB
testcase_26 AC 72 ms
50,448 KB
testcase_27 AC 60 ms
50,256 KB
testcase_28 AC 63 ms
49,924 KB
testcase_29 AC 56 ms
50,272 KB
testcase_30 AC 74 ms
50,848 KB
testcase_31 AC 67 ms
50,476 KB
testcase_32 AC 156 ms
51,152 KB
testcase_33 AC 221 ms
50,844 KB
testcase_34 AC 209 ms
51,976 KB
testcase_35 AC 218 ms
50,804 KB
testcase_36 AC 141 ms
51,060 KB
testcase_37 AC 215 ms
50,840 KB
testcase_38 AC 129 ms
50,836 KB
testcase_39 AC 195 ms
50,828 KB
testcase_40 AC 86 ms
51,200 KB
testcase_41 AC 52 ms
49,808 KB
testcase_42 AC 54 ms
50,244 KB
testcase_43 AC 54 ms
50,092 KB
testcase_44 AC 50 ms
49,832 KB
testcase_45 AC 51 ms
50,116 KB
testcase_46 AC 52 ms
50,144 KB
testcase_47 AC 54 ms
49,788 KB
testcase_48 AC 53 ms
49,864 KB
testcase_49 AC 52 ms
49,808 KB
testcase_50 AC 51 ms
49,652 KB
testcase_51 AC 50 ms
49,700 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import java.io.IOException;
import java.io.InputStream;
import java.util.NoSuchElementException;


public class Main {
  public static void main(String[] args) {
    FastScanner sc = new FastScanner();
    long N = sc.nextLong();

    int[] data = {
        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 mod = 1000000000 + 7;

    if (N >= mod) {
      System.out.println(0);
    } else {
      int idx = (int)(N / 10000000);
      long now = data[idx];
      for (long i = 10000000L * idx + 1; i <= N; i ++) {
        now *= i;
        now %= mod;
      }
      System.out.println(now);
    }

  }

}


class FastScanner {
  public static String debug = null;

  private final InputStream in = System.in;
  private int ptr = 0;
  private int buflen = 0;
  private byte[] buffer = new byte[1024];
  private boolean eos = false;

  private boolean hasNextByte() {
    if (ptr < buflen) {
      return true;
    } else {
      ptr = 0;
      try {
        if (debug != null) {
          buflen = debug.length();
          buffer = debug.getBytes();
          debug = "";
          eos = true;
        } else {
          buflen = in.read(buffer);
        }
      } catch (IOException e) {
        e.printStackTrace();
      }
      if (buflen < 0) {
        eos = true;
        return false;
      } else if (buflen == 0) {
        return false;
      }
    }
    return true;
  }

  private int readByte() {
    if (hasNextByte())
      return buffer[ptr++];
    else
      return -1;
  }

  private static boolean isPrintableChar(int c) {
    return 33 <= c && c <= 126;
  }

  private void skipUnprintable() {
    while (hasNextByte() && !isPrintableChar(buffer[ptr]))
      ptr++;
  }

  public boolean isEOS() {
    return this.eos;
  }

  public boolean hasNext() {
    skipUnprintable();
    return hasNextByte();
  }

  public String next() {
    if (!hasNext())
      throw new NoSuchElementException();
    StringBuilder sb = new StringBuilder();
    int b = readByte();
    while (isPrintableChar(b)) {
      sb.appendCodePoint(b);
      b = readByte();
    }
    return sb.toString();
  }

  public long nextLong() {
    if (!hasNext())
      throw new NoSuchElementException();
    long n = 0;
    boolean minus = false;
    int b = readByte();
    if (b == '-') {
      minus = true;
      b = readByte();
    }
    if (b < '0' || '9' < b) {
      throw new NumberFormatException();
    }
    while (true) {
      if ('0' <= b && b <= '9') {
        n *= 10;
        n += b - '0';
      } else if (b == -1 || !isPrintableChar(b)) {
        return minus ? -n : n;
      } else {
        throw new NumberFormatException();
      }
      b = readByte();
    }
  }

  public int nextInt() {
    return (int) nextLong();
  }

  public long[] nextLongList(int n) {
    return nextLongTable(1, n)[0];
  }

  public int[] nextIntList(int n) {
    return nextIntTable(1, n)[0];
  }

  public long[][] nextLongTable(int n, int m) {
    long[][] ret = new long[n][m];
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        ret[i][j] = nextLong();
      }
    }
    return ret;
  }

  public int[][] nextIntTable(int n, int m) {
    int[][] ret = new int[n][m];
    for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
        ret[i][j] = nextInt();
      }
    }
    return ret;
  }
}
0