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++
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;
|
|
} |