func_code_string: #include <bits/stdc++.h>   using namespace std;   long long jc[100005], fac[12], vp[12], P[12], s, v[100005][12], r[100005][12];   long long n, L, R, p;   long long fpower(long long x, long long k) {     long long ans = 1;     while (k) {       if (k & 1) ans = ans * x % p;       x = x * x % p;       k >>= 1;     }     if (!ans) return p;     return ans;   }   long long c(long long x, long long y) {     long long m[12] = {}, ans = 0;     for (long long i = 1; i <= s; ++i) {       long long o = v[x][i] - v[y][i] - v[x - y][i];       if (o >= vp[i]) continue;       long long q = fpower(fac[i], vp[i] - o);       m[i] =           fpower(fac[i], o) *           (r[x][i] *            fpower(r[y][i] * r[x - y][i] % q, q / fac[i] * (fac[i] - 1) - 1) % q) %           P[i];       ans += m[i] * fpower(p / P[i], P[i] / fac[i] * (fac[i] - 1)) % p;     }     return ans % p;   }   int main() {     scanf( %I64d%I64d%I64d%I64d , &n, &p, &L, &R);     jc[0] = 1;     for (long long i = 1; i <= n; ++i) jc[i] = jc[i - 1] * i % p;     long long t = p;     for (long long i = 2; i * i <= t; ++i) {       if (t % i) continue;       fac[++s] = i;       while (t % i == 0) vp[s]++, t /= i;       P[s] = fpower(fac[s], vp[s]);     }     if (t > 1) fac[++s] = t, vp[s] = 1, P[s] = t;     for (long long i = 1; i <= s; ++i) {       r[0][i] = 1;       for (long long j = 1; j <= n; ++j) {         long long t = j, sum = 0;         while (t % fac[i] == 0) t /= fac[i], sum++;         v[j][i] = v[j - 1][i] + sum, r[j][i] = r[j - 1][i] * t % P[i];       }     }     long long ans = 0;     for (long long i = 0; i <= n; ++i) {       long long o = 0;       if (i - L >= 0) o += c(i, (i - L) / 2);       if (i - R - 1 >= 0) o -= c(i, (i - R - 1) / 2);       ans = (ans + c(n, i) * o) % p;     }     printf( %I64d n , (p + ans % p) % p);     return 0;   }   