ll power(ll a, ll n) { ll res = 1; while (n) { if (n & 1) res = res * a % mod; a = a * a % mod; n >>= 1; } return res; }
ll solve(ll n) { now = f[0] = nf[0] = 1; for (int i = 1; i <= m + 3; i++) { now = now * (n - i) % mod; f[i] = f[i - 1] * i % mod; nf[i] = -nf[i - 1] * i % mod; } ll res = 0; for (int i = 1; i <= m + 3; i++) { ll t = power(f[i - 1] * nf[m + 3 - i] % mod, mod - 2); res = (res + c[i] * now % mod * power(n - i, mod - 2) % mod * t % mod) % mod; res = (res + mod) % mod; } return res; }
ll calc(ll x) { if (x <= m + 3) return c[x]; returnsolve(x); }
intmain() { // freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); scanf("%d", &T); while (T--) { scanf("%lld%lld", &n, &m); for (int i = 1; i <= m; i++) scanf("%lld", &a[i]); sort(a + 1, a + m + 1); for (int i = 1; i <= min(m + 3, n); i++) c[i] = (c[i - 1] + power(i, m + 1)) % mod; ll res = 0; for (int i = 0; i <= m; i++) res = (res + calc(n - a[i])) % mod; for (int i = 0; i <= m - 1; i++) { for (int h = i + 1; h <= m; h++) { ll t = power(a[h] - a[i], m + 1); res = ((res - t) % mod + mod) % mod; } } printf("%lld\n", res); } return0; }
int T, k; ll a, n, d, now, fc[N], nfc[N]; ll f[N], g[N];
ll power(ll a, ll n) { ll res = 1; while (n) { if (n & 1) res = res * a % mod; a = a * a % mod; n >>= 1; } return res; }
ll solve(ll n, int m, ll *c) { now = fc[0] = nfc[0] = 1; for (int i = 1; i <= m; i++) { now = now * (n - i) % mod; fc[i] = fc[i - 1] * i % mod; nfc[i] = -nfc[i - 1] * i % mod; } ll res = 0; for (int i = 1; i <= m; i++) { ll t = power(fc[i - 1] * nfc[m - i] % mod, mod - 2); res = (res + c[i] * now % mod * power(n - i, mod - 2) % mod * t % mod) % mod; res = (res + mod) % mod; } return res; }
ll calc(ll n, int m, ll *c) { if (n <= m) return c[n]; returnsolve(n, m, c); }
intmain() { // freopen("in.txt", "r", stdin); // freopen("out.txt", "w", stdout); scanf("%d", &T); while (T--) { scanf("%d%lld%lld%lld", &k, &a, &n, &d); for (int i = 0; i <= k + 3; i++) f[i] = (f[i - 1] + power(i, k)) % mod; for (int i = 1; i <= k + 3; i++) f[i] = (f[i] + f[i - 1]) % mod; for (int i = 0; i <= k + 5; i++) g[i] = calc((a + i * d) % mod, k + 3, f); for (int i = 1; i <= k + 5; i++) g[i] = (g[i] + g[i - 1]) % mod; printf("%lld\n", calc(n, k + 5, g)); } return0; }