constint N = 5e3 + 7, mod = 1e6 + 7; int fact[N],inv[N]; int n, m, k; int c[N][N];
intqmi(int a,int b){ int res = 1ll % mod; while (b) { if (b & 1) res = res * a % mod; a = a * a % mod; b >>= 1; } return res % mod; }
intC(int n,int m){ return c[n][m]; }
voidinit(){ for (int i = 0; i < N; ++ i ) c[i][0] = 1; for (int i = 0; i < N; ++ i ) c[i][i] = 1; for (int i = 1; i < N; ++ i ) { for (int j = 1; j < N; ++ j ) c[i][j] = c[i-1][j-1] + c[i-1][j], c[i][j] %= mod; } }
int T;
voidsolve(){ printf("Case %lld: ", ++ T); cin >> n >> m >> k; int ans = 0; for (int i = 0; i < 16; ++ i ) { int r = n, c = m, cnt = 0; for (int j = 0; j <= 3; ++ j ) { if (i & (1 << j)) { ++ cnt; if (j == 0 || j == 1) -- r; else -- c; } } int fg = cnt & 1 ? -1 : 1; ans = ((ans + fg * C(r * c, k)) % mod + mod) % mod; } cout << ans << endl; }
signedmain(){ init(); int t; cin >> t; while (t-- ) solve(); return0; }
int n, m, k; int T; vector<int> mid; intf(int x){ int ans = 0; for (int i = 0; i < (1 << mid.size()); ++ i ) { int now = 1; int cnt = 0; for (int j = 0; j < mid.size(); ++ j ) { if ((1 << j) & i) now *= mid[j], ++ cnt; } int fg = cnt & 1 ? -1 : 1; ans = ((ans + fg * (x / now))) ; } return ans; } voidsolve(){ mid.clear(); int a,b; cin >> a >> b >> n; for (int i = 2; i <= n / i; ++ i) { if (n < i) break; if (n % i == 0) { mid.emplace_back(i); while (!(n % i)) n /= i; } } if (n > 1) mid.emplace_back(n); printf("Case #%lld: ", ++ T); cout << f(b) - f(a - 1) << endl; } signedmain(){ int t; cin >> t; while(t--) solve(); return0; }
int fact[N]; intC(int n,int m){ int s = 1ll; for (int i =n -m + 1; i <= n; ++ i ) s *= i; for (int i = 1; i <= m; ++ i) s /= i; return s; } voidsolve(){ while (cin >> n ) { int ans = fact[n]; for (int i = 1; i <= n; ++ i ) { int fg = i & 1 ? -1 : 1; ans += fg * C(n, i) * fact[n - i]; } cout << ans << endl; } }
signedmain(){ fact[1] = 1;fact[0 ] = 1; for (int i = 2; i <= 22; ++ i ) fact[i] = fact[i - 1] * i; solve(); return0; }
#define int long long constint N = 2e5 + 7, mod = 998244353; int fact[N],inv[N]; int n, m, k;
intqmi(int a,int b){ int res = 1 % mod; a %= mod; while (b) { if (b & 1) res = res * a % mod; a = a * a % mod; b >>= 1; } return res % mod; }
intC(int n,int m){ if (n < m) return0; return fact[n] * inv[n - m] % mod * inv[m] % mod; }
voidinit(){ inv[0] = fact[0] = 1; for (int i = 1; i < N; ++ i ) fact[i] = fact[i - 1] * i % mod; inv[N - 1] = qmi(fact[N - 1], mod - 2); for (int i = N - 2; i >= 1; -- i ) inv[i] = inv[i + 1] * (i + 1) % mod; }
voidsolve(){ cin >> n >> m >> k; int cnt = (k + m - 1) / n; int ans = 0; for (int i = 0; i <= cnt; ++ i ) { int fg = i & 1 ? -1 : 1; ans = ((ans + fg * C(m, i) * C(k + m - 1 - i * n, m - 1) % mod) + mod) % mod; } cout << ans % mod << endl; }
signedmain(){ init(); int t; cin >> t; while ( t-- ) solve(); return0; }
#define int long long constint N = 2e5 + 7, mod = 998244353; int fact[N],inv[N]; int n, m, k;
intqmi(int a,int b){ int res = 1ll % mod; while (b) { if (b & 1) res = res * a % mod; a = a * a % mod; b >>= 1; } return res % mod; }
intC(int n,int m){ if (n < m) return0; return fact[n] * inv[n - m] % mod * inv[m] % mod; }
voidinit(){ fact[0] = inv[0] = 1; for (int i = 1; i < N; ++ i ) fact[i] = fact[i-1] * i % mod; inv[N - 1] = qmi(fact[N - 1], mod - 2); for (int i = N - 2; i >= 1; -- i) inv[i] = inv[i + 1] * (i + 1) % mod; }
intf(int n,int m,int k){ int ans = 0; ++ k; int cnt = n - m + 1; for (int i = 0; i <= cnt; ++ i ) { int fg = i & 1 ? -1 : 1; ans = ((ans + fg * C(cnt, i) * C(m - i * k + cnt - 1, cnt - 1) % mod) % mod + mod) % mod; } return ans % mod; }
voidsolve(){ cin >> n >> m >> k; cout << ((f(n, m, k) - f(n, m, k - 1) % mod) + mod ) % mod << endl; }
constint N = 2e5 + 7; int a[N],b[N]; int ta[N], tb[N]; bool v[N]; int n, m, k, T, l, r;
intexgcd(int a,int b,int &x,int &y){ if (!b) { x = 1, y = 0; return a; } int d = exgcd(b, a % b, x, y); int z = x; x = y; y = z - y * (a / b); return d; }
intqmul(int a,int b,int mod){ int res = 0; while (b) { if (b & 1) res = (res + a) % mod; a = (a + a) % mod; b >>= 1; } return res; }
intCRT(int a[],int m[],int n){ // a是余数,m是模数,n是方程个数 int M = 1, r = 0; for (int i = 0; i <= n; ++ i) M *= m[i]; for (int i = 0, Mi, x ,y; i <= n; ++ i) { Mi = M / m[i]; int d = exgcd(Mi, m[i], x ,y); x = (x % M + M) % M; r = (r + qmul(qmul(a[i], Mi, M), x, M)) % M; r %= M; } if (r < 0) r += M; return r; }
voidsolve(){ cin >> n >> l >> r; -- l; for (int i = 1; i <= n; ++ i) cin >> a[i] >> b[i]; int ans = 0; for (int i = 0; i < (1 << n); ++ i) { int cnt = 0, mm = 7; for (int j = 0; j < n; ++ j) { if ((1 << j) & i) ta[++cnt] = b[j + 1], tb[cnt] = a[j + 1], mm *= a[j + 1]; } int fg = cnt & 1 ? -1 : 1; int res = CRT(ta, tb, cnt); if (res > r) continue; int num = (r - res) / mm + 1; // 求个数 if (l >= res) num = num - 1 - (l - res) / mm; ans += fg * num; } printf("Case #%lld: %lld\n", ++ T, ans); }
signedmain(){ a[0] = 7; ta[0] = 0; tb[0] = 7; int t; cin >> t; while (t--) solve(); return0; }