結果
| 問題 | No.2176 LRM Question 1 | 
| コンテスト | |
| ユーザー |  ineedyourlovep | 
| 提出日時 | 2023-01-06 21:50:08 | 
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 52 ms / 2,000 ms | 
| コード長 | 2,777 bytes | 
| コンパイル時間 | 2,135 ms | 
| コンパイル使用メモリ | 200,092 KB | 
| 最終ジャッジ日時 | 2025-02-09 23:50:23 | 
| ジャッジサーバーID (参考情報) | judge4 / judge4 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 22 | 
ソースコード
#include <bits/stdc++.h>
#define rep(i, a, n) for(int i = a; i < (n); i++)
#define drep(i, a, n) for(int i = (n)-1; i >= a; i--)
using namespace std;
using ll = long long;
using P = pair<int, int>;
const int INF = 1001001001;
const ll LINF = 1001002003004005006ll;
//const int mod = 1000000007;
//const int mod = 998244353;
int mod = 1000000007;
//MINT
struct mint {
  unsigned x;
  mint(): x(0) {}
  mint(ll x):x((x%mod+mod)%mod) {}
  mint operator-() const { return mint(0) - *this;}
  mint operator~() const { return mint(1) / *this;}
  mint& operator+=(const mint& a) { if((x+=a.x)>=mod) x-=mod; return *this;}
  mint& operator-=(const mint& a) { if((x+=mod-a.x)>=mod) x-=mod; return *this;}
  mint& operator*=(const mint& a) { x=(unsigned long long)x*a.x%mod; return *this;}
  mint& operator/=(const mint& a) { x=(unsigned long long)x*a.pow(mod-2).x%mod; return *this;}
  mint operator+(const mint& a) const { return mint(*this) += a;}
  mint operator-(const mint& a) const { return mint(*this) -= a;}
  mint operator*(const mint& a) const { return mint(*this) *= a;}
  mint operator/(const mint& a) const { return mint(*this) /= a;}
  mint pow(ll t) const {
    if (!t) return 1;
    mint res = pow(t>>1);
    res *= res;
    return (t&1)?res*x:res;
  }
  bool operator<(const mint& a) const { return x < a.x;}
  bool operator==(const mint& a) const { return x == a.x;}
  bool operator!=(const mint& a) const { return x != a.x;}
};
mint ex(mint x, ll t) { return x.pow(t);}
istream& operator>>(istream& i, mint& a) { unsigned long long t; i>>t; a=mint(t); return i;}
ostream& operator<<(ostream& o, const mint& a) { return o<<a.x;}
struct modinv{
    int n;
    vector<mint> d;
    modinv(): n(2), d({0, 1}) {};
    mint operator()(int i){ while(n <= i){ d.push_back(-d[mod%n]*(mod/n)); n++;} return d[i];}
    mint operator[](int i) const { return d[i];}
}invs;
struct modfact{
    int n;
    vector<mint> d;
    modfact(): n(2), d({1, 1}) {}
    mint operator()(int i) { while(n <= i){ d.push_back(d.back()*n); n++;} return d[i];}
    mint operator[](int i) const { return d[i];}
}facs;
struct modfactinv{
    int n;
    vector<mint> d;
    modfactinv(): n(2), d({1, 1}) {}
    mint operator()(int i) { while(n <= i){ d.push_back(d.back()*invs(n)); n++;} return d[i];}
    mint operator[](int i) const { return d[i];}
}ifacs;
mint comb(int a, int b){
    if(a < b || b < 0) return 0;
    return facs(a)*ifacs(b)*ifacs(a-b);
}
int main()
{
  ll l, r, m;
  cin >> l >> r >> m;
  mod = (int)m;
  if (l >= m) {
    cout << 0 << endl;
    return 0;
  }
  mint ans = 1;
  rep(i, 1, l+1) {
    ans = ans*facs(i);
  }
  mint res = ans;
  for (ll i = l+1; i <= min(r, m); i++) {
    res += ans*facs((int)i);
    ans *= facs((int)i);
  }
  cout << res << endl;
  return 0;
}
            
            
            
        