You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
657 B
C++

#include <cstdio>
const int mod = 1000000007;
int fast_pow(long long x, long long y)
{
long long ans = 1;
while (y)
{
if (y & 1)
ans = (ans*x) % mod;
x = (x*x) % mod;
y >>= 1;
}
return ans;
}
int arrsum(int n, int k)
{
if (n == 1) return 1;
long long ans = arrsum(n >> 1, k);
ans = ans + (fast_pow(k, n >> 1)*ans) % mod;
if (n & 1) ans += fast_pow(k, n - 1);
return ans%mod;
}
int main()
{
freopen("sum.in", "r", stdin);
freopen("sum.out", "w", stdout);
int n, m, ans = 0;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++)
ans = (ans + arrsum(m + 1, i) - 1) % mod;
printf("%d", ans);
return 0;
}