#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 1e9 + 7;
int fast_power(int a, int b) {
int ans = 1;
while(b) {
if(b & 1) ans = ans * a % mod;
a = a * a % mod; b >>= 1;
}
return ans;
}
void solve() {
int n, k, m; cin >> n >> k >> m;
vector<int> p(m + 1), q(m + 1), r(m + 1), S(m + 1), prep(m + 1);
p[0] = 1, prep[0] = 1;
int invk = fast_power(k, mod - 2);
for(int i = 1; i <= m; i++)
p[i] = (i - k > 0 ? prep[i - 1] - prep[i - k - 1] + mod : prep[i - 1]) * invk % mod,
prep[i] = (prep[i - 1] + p[i]) % mod;
for(int i = max(0ll, m - k); i < m; i++)
q[i] = (i + k - m + 1) * invk % mod, r[i] = p[i] * q[i] % mod;
for(int i = m - 1; i >= 0; i--) S[i] = (S[i + 1] + r[i]) % mod;
int ans = 0;
for(int i = 0; i <= m - k - 1; i++)
(ans += p[i] * n % mod) %= mod;
for(int i = max(0ll, m - k); i <= m - 1; i++) {
if(q[i] == 0) continue;
(ans += (fast_power(S[i], n) - fast_power(S[i + 1], n) + mod) % mod * fast_power(q[i], mod - 2) % mod) %= mod;
}
cout << ans << '\n';
}
signed main() {
ios::sync_with_stdio(false);
ios_base::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
// For Problem with file IO
// #ifndef CPH
// freopen(".in", "r", stdin);
// freopen(".out", "w", stdout);
// #endif
int t = 1;
// cin >> t;
while(t--) {
solve();
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include<bits/stdc++.h> using namespace std; #define int long long const int mod = 1e9 + 7; int fast_power(int a, int b) { int ans = 1; while(b) { if(b & 1) ans = ans * a % mod; a = a * a % mod; b >>= 1; } return ans; } void solve() { int n, k, m; cin >> n >> k >> m; vector<int> p(m + 1), q(m + 1), r(m + 1), S(m + 1), prep(m + 1); p[0] = 1, prep[0] = 1; int invk = fast_power(k, mod - 2); for(int i = 1; i <= m; i++) p[i] = (i - k > 0 ? prep[i - 1] - prep[i - k - 1] + mod : prep[i - 1]) * invk % mod, prep[i] = (prep[i - 1] + p[i]) % mod; for(int i = max(0ll, m - k); i < m; i++) q[i] = (i + k - m + 1) * invk % mod, r[i] = p[i] * q[i] % mod; for(int i = m - 1; i >= 0; i--) S[i] = (S[i + 1] + r[i]) % mod; int ans = 0; for(int i = 0; i <= m - k - 1; i++) (ans += p[i] * n % mod) %= mod; for(int i = max(0ll, m - k); i <= m - 1; i++) { if(q[i] == 0) continue; (ans += (fast_power(S[i], n) - fast_power(S[i + 1], n) + mod) % mod * fast_power(q[i], mod - 2) % mod) %= mod; } cout << ans << '\n'; } signed main() { ios::sync_with_stdio(false); ios_base::sync_with_stdio(false); cin.tie(0), cout.tie(0); // For Problem with file IO // #ifndef CPH // freopen(".in", "r", stdin); // freopen(".out", "w", stdout); // #endif int t = 1; // cin >> t; while(t--) { solve(); } return 0; } |
English