けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 055 B - Training Camp (5Q, 灰色, 200 点)

mod を練習できる問題!

問題概要

正の整数  N が与えられる。

 1 \times 2 \times \dots \times N を 1000000007 で割った余りを求めよ。

考えたこと

まず「1000000007 で割った余り」といったものを考えるための、基本的な知見を次の記事にまとめた。

qiita.com

結論として、 a \times b を 1000000007 で割った余りを求めたいとき、次のようにすれば良いのだ。

  •  a を 1000000007 で割った余りで置き換える
  •  b を 1000000007 で割った余りで置き換える
  •  a \times b を計算して、その値を 1000000007 で割った余りを求める

今回も  1 \times 2 \times \dots \times N の値をそのように求めればよい。

コード

#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;

int main() {
    long long N;
    cin >> N;

    long long res = 1;
    for (long long i = 1; i <= N; i++) {
        res = (res * i) % MOD;
    }
    cout << res << endl;
}